我有一个类似于下面的数据集:
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,但没有成功.非常感谢.
我们可以使用filter与n_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)