如何仅对R中另一列中具有多个不同值的行进行子集化?

dec*_*per 1 r subset dplyr

我有一个类似于下面的数据集:

zz <-  "Session    Rater     
1          A         X          
2          A         X     
3          A         X   
4          B         Y   
5          B         Y     
6          B         Z   
7          B         Z         
8          C         X   
9          C         Y    
10         C         Z"

Data <- read.table(text=zz, header = TRUE)
Run Code Online (Sandbox Code Playgroud)

我想只对会话有多个raters的会话行进行子集化,即使该数据存储在另一列中.因此,我想最终得到一个如下所示的数据集:

zz2 <-  "Session    Rater     
1          B         Y
2          B         Y
3          B         Z
4          B         Z
5          C         X
6          C         Y
7          C         Z"

Data2 <- read.table(text=zz2, header = TRUE)
Run Code Online (Sandbox Code Playgroud)

会话A行从数据集中删除的地方因为会话A只有一个评价者"X",但会话B和C(及其所有行)都被保留,因为他们有多个评价者(会议B的Y&Z,会话C的X,Y和Z).

我玩过dplyr,但没有成功.非常感谢.

akr*_*run 5

我们可以使用filtern_distinct

library(dplyr)
Data %>%
    group_by(Session) %>% 
    filter(n_distinct(Rater)>1)
#  Session  Rater
#   <fctr> <fctr>
#1       B      Y
#2       B      Y
#3       B      Z
#4       B      Z
#5       C      X
#6       C      Y
#7       C      Z
Run Code Online (Sandbox Code Playgroud)

或使用 data.table

library(data.table)
setDT(Data)[, if(uniqueN(Rater)>1)  .SD, by = Session]
Run Code Online (Sandbox Code Playgroud)

或者 base R

i1 <- rowSums(!!table(Data))
subset(Data, Session %in% names(i1)[i1 >1])
Run Code Online (Sandbox Code Playgroud)