如何根据值,基于跨行的列之间的条件对dataframe进行子集

如何根据值,基于跨行的列之间的条件对dataframe进行子集,r,subset,R,Subset,我有一个数据框,里面有个人id、时间段和工作地点代码的信息。我想知道谁是在数据集的整个时间跨度内独自工作的人 考虑下面这个非常简单的例子。在第1阶段,个人A在两个工作地点(x,y)单独工作。在第1阶段,个人B和C在工作地点z一起工作。在第2阶段,个人B单独在工作场所w工作。第二阶段,D个人单独在k地点工作 mydf <- data.frame(id=c('A','A','B','C','B','D'), period=c(1,1,1,1,2,2),

我有一个数据框,里面有个人id、时间段和工作地点代码的信息。我想知道谁是在数据集的整个时间跨度内独自工作的人

考虑下面这个非常简单的例子。在第1阶段,个人A在两个工作地点(x,y)单独工作。在第1阶段,个人B和C在工作地点z一起工作。在第2阶段,个人B单独在工作场所w工作。第二阶段,D个人单独在k地点工作

mydf <- data.frame(id=c('A','A','B','C','B','D'),
                   period=c(1,1,1,1,2,2),
                   work_place=c('x','y','z','z','w','k'))

mydf按“期间”、“工作地点”分组,创建一个列“n”,列中包含不同的“id”编号,然后按“id”分组,
过滤器
这些“id”的所有
元素均为1

library(dplyr)
mydf %>%
  group_by(period, work_place) %>% 
  mutate(n = n_distinct(id)) %>%
  group_by(id) %>% 
  filter(all(n ==1)) %>%
  ungroup %>%
  select(-n)
-输出

# A tibble: 3 x 3
#  id    period work_place
#  <chr>  <dbl> <chr>     
#1 A          1 x         
#2 A          1 y         
#3 D          2 k         
#一个tible:3 x 3
#身份证期间工作地点
#          
#1 A 1 x
#2 A 1 y
#3D2K

A
data.table
选项(遵循来自的相同想法)

   id period work_place
1:  A      1          x
2:  A      1          y
3:  D      2          k

太好了,非常感谢!好主意!向上投票!
setDT(mydf)[
  ,
  n := uniqueN(id),
  .(period, work_place)
][
  ,
  .SD[mean(n) == 1], id
][
  ,
  n := NULL
][]
   id period work_place
1:  A      1          x
2:  A      1          y
3:  D      2          k