R에서 수정하는 방법: 유효하지 않은 요인 수준, na 생성


R을 사용할 때 나타날 수 있는 경고 메시지는 다음과 같습니다.

 Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C"):
  invalid factor level, NA generated

이 경고는 정의된 수준으로 아직 존재하지 않는 R의 요인 변수에 값을 추가하려고 할 때 발생합니다.

다음 예에서는 실제로 이 경고에 대응하는 방법을 보여줍니다.

경고를 재현하는 방법

R에 다음과 같은 데이터 프레임이 있다고 가정합니다.

 #create data frame
df <- data. frame (team=factor(c('A', 'A', 'B', 'B', 'B')),
                 dots=c(99, 90, 86, 88, 95))

#view data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95

#view structure of data frame
str(df)

'data.frame': 5 obs. of 2 variables:
 $ team: Factor w/ 2 levels "A","B": 1 1 2 2 2
 $ points: num 99 90 86 88 95

변수는 “A”와 “B”라는 두 가지 수준의 요인임을 알 수 있습니다.

이제 의 “C” 값을 사용하여 데이터 프레임 끝에 새 줄을 추가 하려고 한다고 가정합니다.

 #add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)

Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C"):
  invalid factor level, NA generated

“C” 값이 아직 변수의 요인 수준으로 존재하지 않기 때문에 경고 메시지가 나타납니다.

이는 단지 경고 메시지일 뿐이며 R은 여전히 데이터 프레임 끝에 줄바꿈을 추가하지만 ‘C’ 대신 NA 값을 사용한다는 점을 기억하는 것이 중요합니다.

 #view updated data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 NA 100

경고를 피하는 방법

잘못된 요인 수준 경고를 방지하려면 먼저 요인 변수를 문자 변수로 변환한 다음 새 줄을 추가한 후 다시 요인 변수로 변환할 수 있습니다.

 #convert team variable to character
df$team <- as. character (df$team)

#add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)

#convert team variable back to factor
df$team <- as. factor (df$team)

#view updated data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 C 100

데이터 프레임 끝에 개행 문자를 성공적으로 추가하고 경고 메시지를 피하는 데 성공했습니다.

또한 “C” 값이 변수에 요인 수준으로 추가되었는지 확인할 수도 있습니다.

 #view structure of updated data frame
str(df)

'data.frame': 6 obs. of 2 variables:
 $ team: Factor w/ 3 levels "A","B","C": 1 1 2 2 2 3
 $points: chr "99" "90" "86" "88" ...

추가 리소스

다음 튜토리얼에서는 R의 다른 일반적인 오류를 수정하는 방법을 설명합니다.

R에서 수정하는 방법: 인수에 다른 줄 수가 포함됩니다.
R에서 수정하는 방법: 사용하지 않는 인수를 선택하는 중 오류가 발생했습니다.
R에서 복구하는 방법: 교체 길이가 0입니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다