如何基于两列组合两个数据框? [复制]

Posted

技术标签:

【中文标题】如何基于两列组合两个数据框? [复制]【英文标题】:How do I combine two data-frames based on two columns? [duplicate] 【发布时间】:2011-10-06 06:04:38 【问题描述】:

我知道我可以使用plyr 和它的朋友来合并数据框,也可以使用merge,但是到目前为止我不知道如何将两个数据框与基于 2 列的多列合并?

【问题讨论】:

【参考方案1】:

您也可以使用连接命令 (dplyr)。

例如:

new_dataset <- dataset1 %>% right_join(dataset2, by=c("column1","column2"))

【讨论】:

对于那些想要合并数据框并只保留指定列的匹配记录的人,请使用inner_join而不是right_join【参考方案2】:

希望这会有所帮助;

df1 = data.frame(CustomerId=c(1:10),
             Hobby = c(rep("sing", 4), rep("pingpong", 3), rep("hiking", 3)),
             Product=c(rep("Toaster",3),rep("Phone", 2), rep("Radio",3), rep("Stereo", 2)))

df2 = data.frame(CustomerId=c(2,4,6, 8, 10),State=c(rep("Alabama",2),rep("Ohio",1),   rep("Cal", 2)),
             like=c("sing", 'hiking', "pingpong", 'hiking', "sing"))

df3 = merge(df1, df2, by.x=c("CustomerId", "Hobby"), by.y=c("CustomerId", "like"))

假设df1$Hobbydf2$like 是同一个意思。

【讨论】:

【参考方案3】:

请参阅?merge 上的文档,其中指出:

By default the data frames are merged on the columns with names they both have, 
 but separate specifications of the columns can be given by by.x and by.y.

这清楚地暗示merge 将基于多列合并数据框。从文档中给出的最后一个示例:

x <- data.frame(k1=c(NA,NA,3,4,5), k2=c(1,NA,NA,4,5), data=1:5)
y <- data.frame(k1=c(NA,2,NA,4,5), k2=c(NA,NA,3,4,5), data=1:5)
merge(x, y, by=c("k1","k2")) # NA's match

此示例旨在演示 incomparables 的用法,但它也说明了使用多个列进行合并。您还可以使用 by.xby.y 在每个 xy 中指定单独的列。

【讨论】:

@darkage 这个问题涉及合并数据帧。看起来你有data.tables。完全不同。我会阅读 data.table 的文档。

以上是关于如何基于两列组合两个数据框? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何基于每个数据框中具有不同名称的两列将两个数据框与 dplyr 连接起来? [复制]

如何从包含前两列组合的熊猫数据框中删除行

Python:如何从具有多列的数据框中循环遍历每两列组合以进行聚类?

python:两列的组合

如何设置具有两列的组合框的值?

mySQL如何防止插入,除非两列(字段)的组合是唯一的? [复制]