#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)