R 警告消息:在“…”中:因子级别无效,已生成NA

R 警告消息:在“…”中:因子级别无效,已生成NA,r,warnings,r-faq,R,Warnings,R Faq,我不明白为什么我会收到这个警告信息 > 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

我不明白为什么我会收到这个警告信息

> 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

>fixed-fixed[1,]警告消息是因为您的“Type”变量是一个因子,而“午餐”不是一个定义的级别。使数据帧强制“Type”为字符时,请使用
stringsAsFactors=FALSE
标志

> 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"
>固定str(固定)
“data.frame”:3个obs。共有2个变量:
$Type:Factor w/1 level“”:NA 1
$Amount:chr“100”“0”“0”
> 
>固定的固定的[1,]str(固定的)
“data.frame”:3个obs。共有2个变量:
$Type:chr“午餐”
$Amount:chr“100”“0”“0”

如果您直接从CSV文件读取,请执行以下操作

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

myDataFrame这是一种灵活的方法,它可以在所有情况下使用,特别是:

  • 只影响一列,或
  • 数据帧
    是通过应用以前的操作(例如,不立即打开文件,或创建新数据帧)获得的

  • 首先,使用
    as.character
    函数取消对字符串的因式分解,然后使用
    as.factor
    (或简称
    factor
    )函数重新因式分解:


    fixed解决此问题的最简单方法是在列中添加一个新因子。使用“级别”功能确定有多少个因子,然后添加一个新因子

        > 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"
    

    从.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"
    
    #安装程序包(“xlsx”)
    图书馆(xlsx)
    
    extracted_df@David为什么R将其转换为因子?因为这是
    data.frame()
    函数中的默认设置(这是默认设置,因为这是大多数用户在绝大多数情况下想要的)。stringAsFactors抛出错误:未使用的参数(stringAsFactors=FALSE)
    stringsafactors
    -
    strings
    需要是复数(@Coliban)