首页 文章

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

提问于
浏览
1

假设我们有一些人做不同的活动 .

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)

因此,一个人的活动 Value 必须是相关活动的一个子集 .

预期结果:

person activity
1      C        1
2      C        2

我试过这样的事情,没有成功:

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

2 回答

  • 1

    我们可以用 all 换行

    data %>% 
         group_by(person) %>% 
         filter(all(activity %in% relevant_activities))
    
  • 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]]]
    

相关问题