我有一个字符串和缺失值的数据框架,我需要将其转换为R中的字符因子,以便为市场篮子分析做准备。行是没有事务id的事务。我担心,如果将单个列转换为因子,那么在将数据帧更改为事务类之后,两个不同列中的同一项将不会被识别为同一项。这是为班级准备的。我遇到了在r4.1中给我看这一行的指导老师:
newDF <- factor(oldDF)
…但在R 4.2中,这条消息失败了:xtfrm.data.frame(x): cannot xtfrm data frames">
这个错误对我来说是有意义的,因为当我阅读factor()函数时,它确实按字母顺序排列结果。出于这个原因,我猜我不想将数据帧转换为单个大向量,然后在其上运行factor()。
可能是"a-rules"中的trans()函数Package自动处理不同列中同一项的因子。
我只想让一列中的一个项目在另一列中被计算为相同的项目,但我不知道如何在按列的基础上分配因子来支持这一点,不能保证所有的项目都在所有的列中表示。
如果您向factor()
提供了级别,那么结果因子将包含所有提供的值,即使这些值没有一个出现在该列中。但是要小心——如果你没有包含一个值作为级别,或者你拼写错了,它将在没有警告的情况下被NA取代,所以要确保包含所有可能的值。
您可以使用across()
将此应用于所有变量。现在newDF中的每一列都是具有相同级别的因子,"item a","item b &","item c"。如果有"d"项;在任何列中,它们将被替换为NA。
library(dplyr)
newDF <- oldDF %>%
mutate(across(everything(), ~factor(.x, levels = c("item A", "item B", "item C"))))