警告信息: 在“ ...”: 无效因素水平,NA 生成

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

> 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
296793 次浏览

警告消息是因为您的“ Type”变量被设置为一个因素,而“ unch”没有被定义为一个级别。使用 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"

如果你是直接从 CSV 文件读取,然后这样做。

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

这是一个 灵活处理,它可以在所有情况下使用,特别是:

  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)

解决这个问题的最简单方法是在列中添加一个新的因子。使用级别函数确定有多少个因子,然后添加一个新因子。

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

但是,我不能处理它与 readxl包裹没有类似的参数的 stringsAsFactors。由于这个原因,我转移到了 xlsx软件包。