通过根据观察数量排除案例来对数据进行子集

时间:2016-07-11 09:33:40

标签: r data.table subset

以下是我的数据:

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)来对数据进行子集化。

1 个答案:

答案 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