Как я могу проверить, существует ли отдельный человек в столбце в нескольких группах?

#r #dplyr #data.table

Вопрос:

У меня есть данные ниже:

 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. Я хотел бы узнать, какой идентификатор участника существует в нескольких группах. В приведенном выше случае a member_id из 3 существует как group_id в 1, так и в 2. Есть ли способ, которым я могу воспользоваться data.table или dplyr выяснить, какие member_id существуют более чем в одной группе?

Ответ №1:

Вы можете использовать n_distinct in dplyr и uniqueN in data.table , чтобы получить количество уникальных group_id в каждом member_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)