Подбор лиц в одну группу - PullRequest
       2

Подбор лиц в одну группу

0 голосов
/ 28 сентября 2018

Я должен сопоставить учеников с их учителями, используя идентификаторы учеников и их учителей.Один ученик может быть в паре с одним учителем.Однако ученик может иметь несколько записей с одним и тем же учителем.Я хочу сохранить только те случаи, когда ученики сопоставляются с одним уникальным учителем.Вот пример для фрейма данных.CHID <- c(111,111,111,112,112,113,113,113,113,114), TEAID <- c(115,115,115,162,165,168,168,168,187,119), SCORE <- c(56,56,56,55,55,58,58,58,58,64)

Исходя из этих данных, я хочу сохранить учеников с 111 и 114 CHID, поскольку они соответствуют одному и только одному уникальному учителю.Кто-нибудь может помочь с r-кодом для выполнения этой задачи?Ваша помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 сентября 2018

Вот решение с использованием пакета dplyr -

df <- data.frame(
CHID = c(111,111,111,112,112,113,113,113,113,114),
TEAID = c(115,115,115,162,165,168,168,168,187,119),
SCORE = c(56,56,56,55,55,58,58,58,58,64)
)

group_by(df, CHID) %>% filter(n_distinct(TEAID) == 1) %>% ungroup()

# A tibble: 4 x 3
#    CHID TEAID SCORE
#   <dbl> <dbl> <dbl>
# 1   111   115  56.0
# 2   111   115  56.0
# 3   111   115  56.0
# 4   114   119  64.0

Вот решение без каких-либо посторонних пакетов -

df[ave(df$TEAID, df$CHID, FUN = function(x) length(unique(x))) == 1, ]

#    CHID TEAID SCORE
# 1   111   115    56
# 2   111   115    56
# 3   111   115    56
# 10  114   119    64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...