我正在尝试在r中对data.frame进行子集化以获取包含特定列中向量中所有值的所有因子级别。 例如:
Beautiful is better than ugly
现在,向量是:dt=data.frame(fact=c(rep("a",3),rep("b",3),rep("c",3)),val=c(1,2,3,2,3,4,3,4,5))
我希望函数只返回“a”,因为这个级别的'fact'在'val'列中包含1和2(级别“b”只包含值2,级别“c”不包含两个)。实际上,向量可以包含任意数量的元素。
看起来很基本但找不到答案,
答案 0 :(得分:0)
我们通过'事实'做一个小组。和filter
如果all
' vec'价值在' val'柱
library(dplyr)
dt %>%
group_by(fact) %>%
filter(all(vec %in% val))
# A tibble: 3 x 2
# Groups: fact [1]
# fact val
# <fct> <dbl>
#1 a 1
#2 a 2
#3 a 3
答案 1 :(得分:0)
sapply(tapply(dt$val, dt$fact, `%in%`, x=vec), all)
给出
a b c
TRUE FALSE FALSE
以这种方式将此逻辑向量存储在一些新值中,例如keep
和子集:
dtsub <- split(dt, dt$fact)[[keep]]