R - 仅显示数据帧子集中使用的级别

时间:2015-02-17 21:35:26

标签: r dataframe r-factor

我有一个相当大的数据框,其中有一个具有很多级别(超过4,000)的因子。我在同一个数据框中有另一列我用作参考,我想找到的是当参考列为NA时的水平子集。

我使用的第一步是subsetrows <- which(is.na(mydata$reference)),但之后我就被卡住了。我想要levels(mydata[subsetrows,mydata$factor])之类的内容,但遗憾的是,此命令会向我显示所有级别,而不仅仅是subsetrows中存在的级别。我想我可以在我的子集行的数据框之外创建一个新的向量,然后删除任何未使用的级别,但是有没有更简单/更清晰的方法来执行此操作,可能不会将数据复制到数据框之外?

作为我想要返回的示例,如果我的数据框具有从A到Z的因子级别,但在我的子集中只出现P,R和Y,我想要一些返回P,R和Y级别的东西。 / p>

2 个答案:

答案 0 :(得分:2)

您当然可以使用base函数完成此操作。但我个人的偏好是使用dplyr链式操作,例如:

library(dplyr)

d %>%
  filter(is.na(ref)) %>%
  select(field) %>%
  distinct()

数据

d <- data.frame(
  field = c("A", "B", "C", "A", "B", "C"),
  ref = c(NA, "a", "b", NA, "c", NA)
  )

答案 1 :(得分:0)

我修改了Marat评论中的建议,使用似乎返回正确级别的函数unique

解决方案:

subsetrows <- which(is.na(mydata$reference))
unique(as.character(mydata$factor[subsetrows]))

虽然我喜欢学习新的软件包和函数,但这个解决方案在这一点上看起来似乎更好,因为如果我需要在将来的某个遥远的地方重新访问这些代码,我会更容易理解。