【问题标题】:Subsetting data by exluding cases based on number of observations [duplicate]通过根据观察次数排除案例来对数据进行子集化[重复]
【发布时间】:2016-07-11 09:33:39
【问题描述】:

这是我的数据:

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

我想通过排除具有少于一个会话(在本例中为 B)的 ID 来对数据进行子集化。

【问题讨论】:

    标签: r data.table subset


    【解决方案1】:

    我们可以在按“ID”分组后使用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
    

    注意:这不会考虑“会话”中的值。它基于行数。

    假设如果 OP 提到唯一“会话”的数量应该大于 1,我们使用 uniqueN(基本上是 unique 元素的 length

    Have[, if(uniqueN(Session) >1) .SD , by = ID]
    

    为了安全起见,如果 OP 只想在 'Session' 中拥有大于 1 的具有 any 值的 'ID'。

    Have[, if(any(Session > 1)) .SD, ID]
    

    或者如果我们更喜欢dplyr

    library(dplyr)
    Have %>% 
          group_by(ID) %>%
          filter(n() >1)
    

    【讨论】:

    • 我认为对我来说最好的解决方案是 dplyr。谢谢!
    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多