R - 仅显示数据框子集中使用的级别
R - show only levels used in a subset of data frame
我有一个相当大的数据框,其中的一个因子有很多级别(超过 4,000)。我在同一数据框中有另一列用作参考,每当此参考列为 NA 时,我想查找的是水平的子集。
我使用的第一步是 subsetrows <- which(is.na(mydata$reference))
,但之后我就卡住了。我想要 levels(mydata[subsetrows,mydata$factor])
之类的东西,但不幸的是,这个命令向我显示了 所有 级别,而不仅仅是 subsetrows
中存在的级别。我想我可以在只有我的子集行的数据框之外创建一个新向量,然后删除任何未使用的级别,但是有没有 easier/cleaner 方法可以做到这一点,可能不需要将我的数据复制到数据框之外?
作为我想要返回的示例,如果我的数据框具有从 A 到 Z 的因子级别,但在我的子集中仅出现 P、R 和 Y,我想要的东西 returns 级别 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)
)
我修改了 Marat 评论中的建议,以使用似乎 return 正确级别的函数 unique
。
解决方案:
subsetrows <- which(is.na(mydata$reference))
unique(as.character(mydata$factor[subsetrows]))
虽然我喜欢学习新的包和函数,但这个解决方案在这一点上似乎更好,因为如果我需要在未来某个遥远的时间重新访问这段代码,它更紧凑,更容易理解。
我有一个相当大的数据框,其中的一个因子有很多级别(超过 4,000)。我在同一数据框中有另一列用作参考,每当此参考列为 NA 时,我想查找的是水平的子集。
我使用的第一步是 subsetrows <- which(is.na(mydata$reference))
,但之后我就卡住了。我想要 levels(mydata[subsetrows,mydata$factor])
之类的东西,但不幸的是,这个命令向我显示了 所有 级别,而不仅仅是 subsetrows
中存在的级别。我想我可以在只有我的子集行的数据框之外创建一个新向量,然后删除任何未使用的级别,但是有没有 easier/cleaner 方法可以做到这一点,可能不需要将我的数据复制到数据框之外?
作为我想要返回的示例,如果我的数据框具有从 A 到 Z 的因子级别,但在我的子集中仅出现 P、R 和 Y,我想要的东西 returns 级别 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)
)
我修改了 Marat 评论中的建议,以使用似乎 return 正确级别的函数 unique
。
解决方案:
subsetrows <- which(is.na(mydata$reference))
unique(as.character(mydata$factor[subsetrows]))
虽然我喜欢学习新的包和函数,但这个解决方案在这一点上似乎更好,因为如果我需要在未来某个遥远的时间重新访问这段代码,它更紧凑,更容易理解。