我有两个数据框,“数据”和“分数”,并希望将它们合并到“id”列:
data = data.frame(id = c(1,2,3,4,5),state = c("KS","MN","AL","FL","CA")) scores = data.frame(id = c(1,1,3),score = c(66,75,78,86,85,76,90)) merge(data,scores,by = "id") semi_join(data,by = "id")
在“得分”数据中,存在具有多个观察的“id”,其中每个匹配在连接之后获得一行.看?合并:
If there is more than one match,all possible matches contribute one row each.
但是,我希望只保留与得分表中第一个匹配对应的行.
半连接本来不错,但我无法从右表中选择得分.
有什么建议么?
解决方法
使用data.table以及mult =“first”和nomatch = 0L:
require(data.table) setDT(scores); setDT(data) # convert to data.tables by reference scores[data,mult = "first",on = "id",nomatch=0L] # id score state # 1: 1 66 KS # 2: 2 86 MN # 3: 3 76 AL
对于数据的id列中的每一行,找到score’id列中的匹配行,并保留第一行(因为mult =“first”).如果没有匹配,则删除它们(因为nomatch = 0L).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。