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