通过作为给定集合的子集的值过滤数据帧

时间:2018-12-10 11:45:32

标签: r

假设我们有些人从事不同的活动。

data <- data.frame(person=c('A','A','A','B','B','B','C','C'), activity=c(1,2,3,1,2,3,1,2))

我想按仅执行“相关活动”的人员过滤数据,而相关活动是由另一个向量定义的。

relevant_activities <- c(1,2)

因此,一个人的活动价值必须是相关活动的子集。

预期结果:

  person activity
1      C        1
2      C        2

我尝试过类似的尝试,但没有成功:

library(dplyr)
data %>%
  group_by(person) %>%
  filter(all(relevant_activities %in% activity))

2 个答案:

答案 0 :(得分:1)

我们可以用count($obj_name->posts)

换行
all

答案 1 :(得分:0)

这是data.table

的解决方案
library("data.table")

D <- data.table(person=c('A','A','A','B','B','B','C','C'), activity=c(1,2,3,1,2,3,1,2))
relevant_activities <- c(1,2)

D[person %in% D[, all(activity %in% relevant_activities), person][, person[V1]]]

或在数据表上带有键:

D <- data.table(person=c('A','A','A','B','B','B','C','C'),
        activity=c(1,2,3,1,2,3,1,2), key="person")
relevant_activities <- c(1,2)

D[D[, all(activity %in% relevant_activities), person][, person[V1]]]