【问题标题】:How can I check if a individual in a column exists in multiple groups?如何检查列中的个人是否存在于多个组中?
【发布时间】:2021-06-02 10:59:53
【问题描述】:

我有以下数据:

group_id <- c(1,1,1,2,2,2,3,3,3,3,4,4)
member_id <- c(1,2,3,4,4,3,5,6,8,10,12,12)

df <- data.frame(group_id,member_id)

> df
   group_id member_id
1         1      1
2         1      2
3         1      3
4         2      4
5         2      4
6         2      3
7         3      5
8         3      6
9         3      8
10        3     10
11        4     12
12        4     12

每个成员都与一个 group_id 配对。我想提取多个组中存在的成员 ID。对于上述情况,member_id 1 和 2 中都存在 3 的 member_id。有没有办法我可以使用 data.tabledplyr 来确定哪个 member_id 存在于多个组中?

【问题讨论】:

    标签: r dplyr data.table


    【解决方案1】:

    您可以使用dplyr 中的n_distinctdata.table 中的uniqueN 来获取每个member_id 中唯一group_id 的计数。只选择那些出现多次的member_id

    library(dplyr)
    
    df %>%
      group_by(member_id) %>%
      filter(n_distinct(group_id) > 1) %>%
      pull(member_id) %>% unique
    
    #[1] 3
    

    data.table

    library(data.table)
    unique(setDT(df)[, .SD[uniqueN(group_id) > 1], member_id]$member_id)
    

    为了完成这里是基本 R 方法 -

    unique(subset(df, ave(group_id, member_id, FUN = function(x) 
           length(unique(x))) > 1, select = member_id))
    

    【讨论】:

      【解决方案2】:

      使用dplyr

      library(dplyr)
      df %>%
            group_by(member_id) %>%
            slice(which(n_distinct(group_id) > 1)) %>%
            ungroup %>%
            distinct(memberid) %>%
            pull(memberid)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-05
        • 2012-03-28
        • 2016-10-30
        • 2022-07-11
        • 2021-07-07
        • 1970-01-01
        • 2016-08-07
        相关资源
        最近更新 更多