通过作为给定集合的子集的值来筛选数据帧

  • 本文关键字:子集 筛选 数据帧 集合 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))

我们可以用all包装

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

这里有一个使用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]]]

最新更新