我有两个示例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具有的更多列,而另一个不包含。我该怎么解决这个问题?
答案 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)