我有一个函数,我在其中定义了data.frame
,我使用循环来填充数据。在某些时候,我收到警告信息:
警告讯息: 1:在
[<-.factor
(*tmp*
,iseq,value =“CHANGE”)中: 无效因子水平,生成NAs
因此,当我定义data.frame时,我想将选项stringsAsFactors
设置为FALSE
,但我不明白该怎么做。
我试过了:
DataFrame = data.frame(stringsAsFactors=FALSE)
还有:
options(stringsAsFactors=FALSE)
设置stringsAsFactors选项的正确方法是什么?
答案 0 :(得分:35)
这取决于您填写数据框的方式,您没有提供任何代码。构建新数据框时,可以这样做:
x <- data.frame(aName = aVector, bName = bVector, stringsAsFactors = FALSE)
在这种情况下, if ,例如aVector
是一个字符向量,然后数据帧列x$aName
也将是一个字符向量,而不是因子向量。将其与现有数据框(使用rbind
,cbind
或类似数据)相结合可以保留该模式。
执行时
options(stringsAsFactors = FALSE)
您更改了全局默认设置。因此,在执行该行之后创建的每个数据框都不会自动转换为因子,除非明确告知这样做。如果您只需要在一个地方避免转换,那么我宁愿不更改默认值。但是,如果这会影响代码中的许多位置,则更改默认值似乎是一个好主意。
还有一件事:如果你的矢量已经包含因子,那么上述两种情况都不会将其改回字符向量。为此,您应该使用as.character
或类似内容将其显式转换回来。