r - 合并具有多个匹配项的数据框时仅选择第一行

标签 r join

我有两个数据框,“data”和“scores”,想将它们合并到“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,1,2,2,3,3,3),
                    score = c(66,75,78,86,85,76,75,90))
merge(data, scores, by = "id")                  
semi_join(data, scores, by = "id")                  

在“scores”数据中,有多个观察值的“id”,其中每个匹配在连接之后获得一行。见 ?merge :

If there is more than one match, all possible matches contribute one row each.



但是,我只想保留与 scores 中的第一个匹配项对应的行 table 。

半连接本来不错,但我无法从正确的表格中选择分数。

有什么建议?

最佳答案

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

对于 data 上的每一行的 id列,scores 中的匹配行' id找到列,并保留第一个(因为 mult = "first" )。如果没有匹配项,它们将被删除(因为 nomatch = 0L )。

关于r - 合并具有多个匹配项的数据框时仅选择第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37749412/

相关文章:

r - 将ggplot2和ggstar中2个图形层的图例与geom_point和geom_star合并

r - 绘图 : put labels on the map

r - 复特征向量

hadoop - 在 Hive 中使用 LIKE 或 RLIKE 连接表

mysql - 如何在 MySQL 的左连接中使用 OR ?

r - 奇怪的括号赋值调用 ('[<-' ) 和矩阵参数

python - 有没有基于索引和列的 Pandas 方法?

C# linq lambda 连接和选择语法

mysql - 合并两个选择查询。让它们独一无二

xml - 使用XML和R有效地获取具有特定名称的子代数