경고 메시지 :`…`: 유효하지 않은 요인 수준, NA 생성


135

이 경고 메시지가 나타나는 이유를 모르겠습니다.

> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> fixed[1, ] <- c("lunch", 100)
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "lunch") :
  invalid factor level, NA generated
> fixed
  Type Amount
1 <NA>    100
2           0
3           0

답변:


216

경고 메시지는 "Type"변수가 요인이되고 "점심"이 정의 된 수준이 아니기 때문입니다. stringsAsFactors = FALSE데이터 프레임을 만들 때 플래그를 사용하여 "Type"을 문자로 만듭니다.

> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> str(fixed)
'data.frame':   3 obs. of  2 variables:
 $ Type  : Factor w/ 1 level "": NA 1 1
 $ Amount: chr  "100" "0" "0"
> 
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3),stringsAsFactors=FALSE)
> fixed[1, ] <- c("lunch", 100)
> str(fixed)
'data.frame':   3 obs. of  2 variables:
 $ Type  : chr  "lunch" "" ""
 $ Amount: chr  "100" "0" "0"

1
@David R이 왜 그것을 Factor로 변환합니까?
KannarKK

1
이것이 data.frame()기능 의 기본 설정이기 때문에 (그리고 대부분의 사용자가 대부분의 시간을 원하는 것이기 때문에 기본값입니다).
David

46

CSV 파일에서 직접 읽는 경우 다음과 같이하십시오.

myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)

stringAsFactors 오류 던지고있다 : 사용되지 않는 인수를 (stringAsFactors = FALSE)
Coliban

1
stringsAsFactors- strings복수형이어야 함 (@Coliban)
campeterson

24

유연한 접근 방식 은 다음과 같은 경우에 특히 사용할 수 있습니다.

  1. 하는 단 하나의 컬럼에 영향을 미치는 , 또는
  2. dataframe(예를 들어 이전의 작업에서 얻어진 도포 한 즉시 파일 열기하지 하거나 새로운 데이터 프레임 생성).

첫째, 유엔 - 인수 분해 사용하여 문자열을 as.character, 다음, 기능 및 재 인수 분해as.factor(또는 간단히 factor) 기능 :

fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))

# Un-factorize (as.numeric can be use for numeric values)
#              (as.vector  can be use for objects - not tested)
fixed$Type <- as.character(fixed$Type)
fixed[1, ] <- c("lunch", 100)

# Re-factorize with the as.factor function or simple factor(fixed$Type)
fixed$Type <- as.factor(fixed$Type)

6

이 문제를 해결하는 가장 쉬운 방법은 열에 새로운 요소를 추가하는 것입니다. 레벨 기능을 사용하여 보유한 요소 수를 확인한 다음 새 요소를 추가하십시오.

    > levels(data$Fireplace.Qu)
    [1] "Ex" "Fa" "Gd" "Po" "TA"
    > levels(data$Fireplace.Qu) = c("Ex", "Fa", "Gd", "Po", "TA", "None")
    [1] "Ex"   "Fa"   "Gd"   "Po"   " TA"  "None"

0

.xlsx 파일에서 데이터를 검색하는 비슷한 문제가 있습니다. 불행히도, 나는 여기서 정답을 찾지 못했습니다. 다른 사람들을 도울 수있는 dplyr을 사용하여 직접 처리했습니다.

#install.packages("xlsx")
library(xlsx)
extracted_df <- read.xlsx("test.xlsx", sheetName='Sheet1', stringsAsFactors=FALSE)
# Replace all NAs in a data frame with "G" character
extracted_df[is.na(extracted_df)] <- "G"

그러나 와 비슷한 매개 변수가없는 readxl패키지 로는 처리 할 수 ​​없습니다 stringsAsFactors. 그런 이유로 xlsx패키지 로 옮겼습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.