首页 > 解决方案 > 通过 R 中的列中的唯一值对数据框进行子集

问题描述

您好,我有一个数据框,例如

Group COL1 Event 
G1 SP1  1
G1 SP2  1
G1 SP3  2
G1 SP3  2 
G2 SP4  3
G2 SP7  3
G2 SP5  6
G3 SP1  1 
G4 SP1  6  

如果是唯一的,我只想保留 COL1 Event(例如,SP3 和 SP5 在事件列中是唯一的)。

然后我应该得到:

Group COL1 Event 
G1 SP3  2
G1 SP3  2 
G2 SP5  6 
G3 SP1  1 
G4 SP1  6 

SP1并且SP2在列中是 2,Event1所以他们没有通过

SP4并且SP7在列中是 2,Event3所以他们没有通过

标签: rdplyr

解决方案


您可以使用 data.table 进行分组,Group并且仅当唯一 COL1 值 ( ) 的数量为 1Event时才返回组内容 ( ) 。.SDuniqueN(COL1)

library(data.table)
setDT(df)

df[, if(uniqueN(COL1) == 1) .SD, by = .(Group, Event)]
#    Group Event COL1
# 1:    G1     2  SP3
# 2:    G1     2  SP3
# 3:    G2     6  SP5
# 4:    G3     1  SP1
# 5:    G4     6  SP1

使用的数据:

df <- fread('
Group COL1 Event 
G1 SP1  1
G1 SP2  1
G1 SP3  2
G1 SP3  2 
G2 SP4  3
G2 SP7  3
G2 SP5  6
G3 SP1  1 
G4 SP1  6  
')

推荐阅读