如何基于两列组合两个数据帧?

Sam*_*Sam 94 merge r dataframe

我知道我可以使用它plyr和它的朋友组合数据帧,merge但是到目前为止我不知道如何根据2列合并两个数据帧和多列?

jor*_*ran 126

请参阅以下文档?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.
Run Code Online (Sandbox Code Playgroud)

这显然意味着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
Run Code Online (Sandbox Code Playgroud)

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

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

Hyu*_*Lee 49

希望这可以帮助;

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"))
Run Code Online (Sandbox Code Playgroud)

假设df1$Hobby并且df2$like意味着同样的事情.


小智 13

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

例如:

new_dataset <- dataset1 %>% right_join(dataset2, by=c("column1","column2"))
Run Code Online (Sandbox Code Playgroud)

  • 对于那些想要合并数据框并仅保留指定列的匹配记录的人,请使用 `inner_join` 代替 `right_join`。 (5认同)