加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

合并具有多个匹配项的数据帧时,仅选择第一行

发布时间:2021-02-28 01:44:37 所属栏目:MsSql教程 来源:网络整理
导读:我有两个数据框,“数据”和“分数”,并希望将它们合并到“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(

我有两个数据框,“数据”和“分数”,并希望将它们合并到“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).

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读