以下是我的数据:
library(data.table)
ID <- c("A","A","B","C","C","C","C")
Session <-c(1,2,1,1,2,3,4)
Value <- c(10,6,15,20,25,35,35)
Have <- data.table(ID,Session,Value)
Have
ID Session Value
A 1 10
A 2 6
B 1 15
C 1 20
C 2 25
C 3 35
C 4 35
我想通过排除少于一个会话的ID(在这种情况下为B)来对数据进行子集化。
答案 0 :(得分:4)
我们可以在按&#34; ID&#34;分组后使用if
条件。
Have[, if(.N>1) .SD , by = ID]
# ID Session Value
#1: A 1 10
#2: A 2 6
#3: C 1 20
#4: C 2 25
#5: C 3 35
#6: C 4 35
注意:这并没有采用&#34; Session&#34;中的值。考虑。它基于行数。
假设OP提到了唯一的&#39; Session&#34;应该大于1,我们使用uniqueN
(基本上是length
unique
元素的<{1}}
Have[, if(uniqueN(Session) >1) .SD , by = ID]
为了安全起见,如果OP希望只有&#39;会话&#39;会话&#39;大于1。
any
或者我们更喜欢Have[, if(any(Session > 1)) .SD, ID]
dplyr