更改 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 也将是一个字符向量,而不是一个因子向量。将其与现有数据框(使用 rbindcbind 或类似的)相结合应该保留该模式。

当你执行时

options(stringsAsFactors = FALSE)

您更改了全局默认设置。因此,您在执行该行后创建的每个数据框都不会自动转换为因子,除非明确告知这样做。如果您只需要避免在一个地方进行转换,那么我宁愿不更改默认值。但是,如果这会影响代码中的许多地方,那么更改默认值似乎是个好主意。

还有一件事:如果你的向量已经包含因子,那么以上都不会将它改回字符向量。为此,您应该使用 as.character 或类似名称将其显式转换回来。

【讨论】:

感谢“另一件事”,看来我的错误来自于此。

以上是关于更改 data.frame 的 stringsAsFactors 设置的主要内容,如果未能解决你的问题,请参考以下文章

更改 data.frame 中的单行名称

覆盖使用 Dplyr - R 过滤的 data.frame 上的值

更改 R 中数据框列表中的列名子集

使用 lapply 更改列表元素中列的格式

更改 data.table 中列名大小写的最有效方法是啥?

如何在ggplot中更改不同数据集的线条颜色并具有图例