在尝试绘制我的数据时,我发现了一个意外的行为,导致我的群体被错误地重新排列和错误标记 .
简而言之,将因子对象存储到数据帧的多个列会导致它被强制转换为字符,而不是因素 . 这似乎与previously-answered question here有关,但我仍然不明白为什么会这样 .
# x is a factor
(x = factor(c("red", "blue", "green")))
class(x)
# make a data frame
frame = data.frame("y"=1:3, "z"=1:3)
# replacing one column at a time yields a factor
frame[,"y"] = x; class(frame[,"y"])
frame[,"z"] = x; class(frame[,"z"])
# however, replacing >1 column at a time yields a character
frame[,c("y", "z")] = x
class(frame$y); class(frame$z)
R中的因素往往会让我感到胃灼热,不知何故!排序,数值和字符级别的组合,一般的繁琐...无论如何,我确信这是我对数据框的特定属性不了解的东西 . 非常感谢您的帮助!
1 回答
所以问题出现在
[<-.data.frame
函数中,当你执行类似的赋值时,它会运行问题是,当您指定多个列时,如果新值不是列表,它将把它转换为具有正确行数和列数的矩阵,然后将其拆分为列表 . 因此,因素的问题是您无法将它们存储在矩阵中 . 如果你试试,你可以看到这个
同样,这种转换正在发生,因为您指定了多个列,并且新值不是列表 . 因此,解决此问题的一种方法是将列表作为新值 .
因此,有些烦人的因素是如此害怕矩阵,但一旦你学会掌握它们,它们确实是R的强大功能 . 不要气馁!