如何为R中具有非唯一值的人获取唯一键

时间:2019-09-03 16:16:40

标签: r

我有以下数据框

fileN<-c("510-1","510-1","510-2","510-2","510-3","510-3","510-3")
disp<-c("account","fail","fail","fail","account","account","fail")

df<-data.frame(fileN,disp)
df

  fileN    disp
1 510-1 account
2 510-1    fail
3 510-2    fail
4 510-2    fail
5 510-3 account
6 510-3 account
7 510-3    fail

我想获得唯一的fileN,其中disp同时具有failaccount

我知道我可以执行以下操作以仅获得具有fail的人

df %>%
  group_by(fileN) %>%
  filter( all(disp == 'fail')) %>%
  distinct

但是如何获得同时拥有fileNfail的用户中的account,以便获得理想的结果

510-1
510-3

2 个答案:

答案 0 :(得分:4)

一个选项是在按'fileN',filter分组之后,其中all的“ disp”列中存在vector个元素,然后{ {1}}并从'fileN'中获取%in%元素

ungroup

如果只有这些值,则另一个选择是

distinct

答案 1 :(得分:2)

基本R选项的组合

v = tapply(df$disp, df$fileN, function(x){
    all(c("account", "fail") %in% x)
})
v[v]
#510-1 510-3 
# TRUE  TRUE 

#OR

with(aggregate(disp ~ fileN, df, function(x){
    all(c("account", "fail") %in% x)
}), fileN[disp])
#[1] 510-1 510-3
#Levels: 510-1 510-2 510-3