更改 data.frame 的 stringsAsFactors 设置
Posted
技术标签:
【中文标题】更改 data.frame 的 stringsAsFactors 设置【英文标题】:Change stringsAsFactors settings for data.frame 【发布时间】:2012-07-17 07:42:01 【问题描述】:我有一个函数,我在其中定义了一个data.frame
,我使用循环来填充数据。在某些时候,我会收到警告消息:
警告信息: 1:在
[<-.factor
(*tmp*
, iseq, value = "CHANGE") 中: 无效因子水平,生成 NAs
因此,当我定义我的 data.frame 时,我想将选项 stringsAsFactors
设置为 FALSE
但我不明白该怎么做。
我试过了:
DataFrame = data.frame(stringsAsFactors=FALSE)
还有:
options(stringsAsFactors=FALSE)
设置 stringsAsFactors 选项的正确方法是什么?
【问题讨论】:
见***.com/questions/2851015/… 供人们搜索有关 stringsAsFactors 的附加信息。从 R 版本 4.0 开始,stringsAsFactors 默认设置为 FALSE。 R blog article 谈论历史细节。另请参阅manual of data.frame。 【参考方案1】:这取决于您如何填充数据框,而您没有提供任何代码。当你构建一个新的数据框时,你可以这样做:
x <- data.frame(aName = aVector, bName = bVector, stringsAsFactors = FALSE)
在这种情况下,如果例如aVector
是一个字符向量,那么数据框列 x$aName
也将是一个字符向量,而不是一个因子向量。将其与现有数据框(使用 rbind
、cbind
或类似的)相结合应该保留该模式。
当你执行时
options(stringsAsFactors = FALSE)
您更改了全局默认设置。因此,您在执行该行后创建的每个数据框都不会自动转换为因子,除非明确告知这样做。如果您只需要避免在一个地方进行转换,那么我宁愿不更改默认值。但是,如果这会影响代码中的许多地方,那么更改默认值似乎是个好主意。
还有一件事:如果你的向量已经包含因子,那么以上都不会将它改回字符向量。为此,您应该使用 as.character
或类似名称将其显式转换回来。
【讨论】:
感谢“另一件事”,看来我的错误来自于此。以上是关于更改 data.frame 的 stringsAsFactors 设置的主要内容,如果未能解决你的问题,请参考以下文章