提问人:ihm 提问时间:5/30/2013 最后编辑:Gregor Thomasihm 更新时间:6/11/2020 访问量:303313
警告消息:在“...”中:无效的因子水平,生成了 NA
Warning message: In `...` : invalid factor level, NA generated
问:
我不明白为什么我会收到这条警告消息。
> 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
答:
223赞
David
5/30/2013
#1
警告消息是因为您的 “Type” 变量被设置为一个因素,而 “lunch” 不是定义的级别。在制作数据框时使用该标志强制“类型”为字符。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"
评论
1赞
KannarKK
8/2/2015
@David 为什么 R 将其转换为因子?
2赞
David
8/3/2015
因为这是函数中的默认设置(它是默认设置,因为这是大多数用户在绝大多数时间想要的内容)。data.frame()
49赞
Chirag
3/4/2016
#2
如果您直接从CSV文件读取,请这样做。
myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)
评论
0赞
Coliban
3/29/2019
stringAsFactors 抛出错误:未使用的参数 (stringAsFactors=FALSE)
1赞
campeterson
10/9/2019
stringsAsFactors
- strings
需要是复数 (@Coliban)
28赞
toto_tico
8/3/2016
#3
这是一种灵活的方法,它可以在所有情况下使用,特别是:
- 仅影响一列,或者
- 通过应用先前的操作(例如,不立即打开文件或创建新数据框)获得。
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)
7赞
Eddie Miller
7/27/2017
#4
解决此问题的最简单方法是向列添加一个新因子。使用水平函数确定您拥有的因子数,然后添加一个新因子。
> 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赞
ozturkib
6/11/2020
#5
我遇到了类似的问题,从.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
下一个:创建 ID(行号)列
评论