【发布时间】:2020-05-19 19:03:27
【问题描述】:
我有两个要合并为一个的数据框。一个数据框中的行并不总是在另一个数据框中,反之亦然。我想保留两个数据集中的所有行和列。此外,有一列(“Tag”)有时对同一行感兴趣(“ID”)具有不同的值。我的数据集太大,无法手动找到它们。当“标签”中的值不相同时,我很难创建一个单独的列。我尝试过test.output1 <-union(test.df1, test.df2,suffix=c(".1",".2")),但由于某些相同的列具有不同的因子水平而出现错误。我也尝试过以下变体:test.output2<-rbind.fill(test.df1, test.df2),但最终出现重复行。
非常感谢任何帮助。谢谢!
例子:
#dataframe 1
test.df1
ID Year Location Tag Length
H1 2013 Site1 272 46
H2 2013 Site2 236 984
H3 2014 Site3 150 68
H4 2014 Site4 698 12
H34 2015 Site1 594 65
#dataframe 3
test.df2
ID Year Species Tag
H1 2013 1 631
H2 2013 2 236
H3 2014 3 755
H4 2014 4 698
H12 2017 3 135
#What I would like the output to be
test.df.3
ID Year Location Species Tag.1 Tag.2 Length
H1 2013 Site1 1 272 631 46
H2 2013 Site2 2 236 NA 984
H3 2014 Site3 3 150 755 68
H4 2014 Site4 4 698 NA 12
H12 2017 NA 3 NA 135 NA
H34 2015 Site1 NA 594 NA 65
【问题讨论】:
-
您可能会使用
dplyr::left_join(test.df1, test.df2, by = c("ID", "Year"))。在函数中,您也可以显式声明添加到具有匹配名称的列的后缀(即标记)。这假设每一行至少有一个 ID 和 Year 可用于配对。 -
你可以使用
mergefrombase Rmerge(test.df1, test.df2, by = c('ID', 'Year'), all = TRUE) -
我也一直在看,@akrun,但输出不同......不确定它是 OP 还是其他什么。
-
H12/Length如何得到20的值? -
我在
test.df1中有不在test.df2中的行,反之亦然,所以left_join ()和right_join ()函数删除了我需要保留的行。merge()保留两个数据帧中的所有行
标签: r