我有一个相当大的数据框,其中的因子有很多级别(超过 4,000)。我在同一数据框中还有另一列用作引用,只要该引用列为 NA,我想要找到的是级别的子集。
我使用的第一步是 subsetrows <- which(is.na(mydata$reference))
但在那之后我就陷入困境了。我想要类似levels(mydata[subsetrows,mydata$factor])
的东西但不幸的是,这个命令向我显示了所有级别,而不仅仅是subsetrows
中存在的级别。 。我想我可以在仅包含子集行的数据框之外创建一个新向量,然后删除任何未使用的级别,但是有没有更简单/更干净的方法来执行此操作,可能无需将数据复制到数据框之外?
作为我想要返回的示例,如果我的数据框具有从 A 到 Z 的因子级别,但在我的子集中仅出现 P、R 和 Y,我想要返回级别 P、R 和 Y 的内容。
最佳答案
您当然可以使用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)
)
关于R - 仅显示数据帧子集中使用的级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28571526/