将个人匹配到单个组

时间:2018-09-27 22:07:03

标签: r

我必须使用学生证和教师证来将学生与他们的老师配对。一个学生只能与一位老师配对。但是,一个学生可能与同一个老师有多个条目。我只想保留学生与一位唯一的老师匹配的情况。这是数据帧的示例。     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)

根据这些数据,我希望保留CHID为111和114的学生,因为他们与一位且只有一位独特的老师匹配。可以请一些R代码执行此任务吗?非常感谢您的协助。

1 个答案:

答案 0 :(得分:2)

这是使用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