【问题标题】:Data.frame becomes factor/vector after filtering/subsettingData.frame 在过滤/子集后成为因子/向量
【发布时间】:2011-06-20 04:18:28
【问题描述】:

我有一个包含一列的 data.frame,如下所示:

>d = data.frame(animal=c("horse","dog","cat"))

然后我通过排除也存在于向量中的所有项目来过滤它。例如:

> res = d[!(d$animal %in% c("horse")),]
> res
[1] dog cat
Levels: cat dog horse
>class(res)
[1] "factor"

这是怎么回事?

【问题讨论】:

  • 另请注意,data.frame 中列的类不是“字符”,而是“因子”:class(d[[1]])

标签: r dataframe


【解决方案1】:

欢迎来到 R。你刚刚被 drop 烦恼所困扰:你需要明确告诉 R 不要“降到一维”:

res = d[!(d$animal %in% c("horse")), , drop = FALSE] 

【讨论】:

  • 查看 Patrick Burns 的 R Inferno 以获得更详细的讨论:lib.stat.cmu.edu/S/Spoetry/Tutor/R_inferno.pdf
  • 这很有趣,我已经使用 R 3 或 4 年了,这是我第一次遇到这种情况。我想我通常不使用 1 列 data.frames。
  • 我并不感到惊讶。这是在深入调试某些函数时出现的一个微妙的事情。引用 R Inferno 中的 Patrick Burns 的话:“未能在函数内部使用 drop=FALSE 是错误的主要来源。只有在下标长度大于 1 时才测试函数。一旦遇到下标的情况,函数就会失败长度为 1|在下游某处是预期的矩阵,而那里有一个简单的向量。”
猜你喜欢
  • 2021-04-27
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多