R:加入并合并两个data.frames

时间:2015-08-10 16:11:06

标签: r join merge dataframe

我有两个示例data.frames df1

df1 <-  structure(list(dataName = structure(c(2L, 1L), .Label = c("HA", "Kol"), class = "factor"), Site = structure(1:2, .Label = c("CA35", "df3"), class = "factor"), add = c(1L, 0L), proxy = c(23.5, 17.3)), .Names = c("dataName", "Site", "add", "proxy"), class = "data.frame", row.names = c(NA, -2L))

 df1
  dataName Site add proxy
1      Kol CA35   1  23.5
2       HA  df3   0  17.3

df2

df2 <- structure(list(dataName = structure(c(2L, 1L, 3L), .Label = c("hcd", "Kol", "la"), class = "factor"), Site = structure(c(1L, 3L, 2L), .Label = c("CA35", "holz", "leta"), class = "factor"), all = structure(c(3L, 2L, 1L), .Label = c("dummy", "ole", "Test"), class = "factor")), .Names = c("dataName", "Site", "all"), class = "data.frame", row.names = c(NA, -3L))

df2
  dataName Site   all
1      Kol CA35  Test
2      hcd leta   ole
3       la holz dummy

我正在尝试使用连接合并data.frames,以便最终结果如下所示:

df_new
  dataName Site add proxy   all
1      Kol CA35   1  23.5  Test
2       HA  df3   0  17.3  <NA>
3      hcd leta  NA    NA   ole
4       la holz  NA    NA dummy

我尝试了this帖子中的所有变体,但我无法使用merge()函数达到所需的最终结果。在我的真实数据中,data.frames要大得多,并且包含一个data.frame具有的更多列,而另一个不包含。我该怎么解决这个问题?

2 个答案:

答案 0 :(得分:1)

我相信,这只会使用基础merge来满足您的需求。

df3 <- merge(df1,df2,by=c("dataName","Site"),all.x=TRUE,all.y=TRUE)


df3
  dataName Site add proxy   all
1       HA  df3   0  17.3  <NA>
2      Kol CA35   1  23.5  Test
3      hcd leta  NA    NA   ole
4       la holz  NA    NA dummy

请注意,由于您有不平衡的列并希望保留它们,因此您必须指定all = true。

答案 1 :(得分:0)

  

df&lt; - merge(df1,df2,by = c(&#39; dataName&#39;,&#39; Site&#39;),all = T)

相关问题