我有一个类似于下面的数据集:
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)
我想只对会话有多个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)
其中会话A从数据集中删除了行,因为会话A只有一个评估者,“X”,但会话B和C(及其所有行)都被保留,因为他们有多个评估者(Y&amp; Z)对于会话B,以及会话C的X,Y和&amp; Z)。
我和dplyr
一起玩过,但没有成功。非常感谢。
答案 0 :(得分:5)
我们可以将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
或使用data.table
library(data.table)
setDT(Data)[, if(uniqueN(Rater)>1) .SD, by = Session]
或base R
i1 <- rowSums(!!table(Data))
subset(Data, Session %in% names(i1)[i1 >1])
答案 1 :(得分:1)
...或使用ave()和下标(假设Rater是一个因素,这是读取字符数据时的默认值)
Data[with(Data,ave(unclass(Rater),Session,
FUN = function(x)length(unique(x)))) > 1,]