我有两个数据框要合并为一个。一个数据帧中的行并不总是位于另一数据帧中,反之亦然。我想保留两个数据集中的所有行和列。另外,有一列(“标签”)有时对于同一条感兴趣的行(“ 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
答案 0 :(得分:2)
联合或行联接将给您十行,我认为这不是您所需要的。它还不会分隔Tag
列。
我认为您需要merge
或加入操作。
merge(test.df1, test.df2, by = c("ID", "Year"), all=TRUE)
# ID Year Location Tag.x Length Species Tag.y
# 1 H1 2013 Site1 272 46 1 631
# 2 H12 2017 <NA> NA NA 3 135
# 3 H2 2013 Site2 236 984 2 236
# 4 H3 2014 Site3 150 68 3 755
# 5 H34 2015 Site1 594 65 NA NA
# 6 H4 2014 Site4 698 12 4 698
这与您在问题中列出的内容不同,但我认为前提是正确的。
修改。更加贴近您的问题,这里我们将Tag.y
更新为NA
并与Tag.x
匹配。
out <- merge(test.df1, test.df2, by = c("ID", "Year"), all=TRUE)
out <- within(out, { Tag.y[Tag.x == Tag.y] = NA_integer_ })
out
# ID Year Location Tag.x Length Species Tag.y
# 1 H1 2013 Site1 272 46 1 631
# 2 H12 2017 <NA> NA NA 3 135
# 3 H2 2013 Site2 236 984 2 NA
# 4 H3 2014 Site3 150 68 3 755
# 5 H34 2015 Site1 594 65 NA NA
# 6 H4 2014 Site4 698 12 4 NA
答案 1 :(得分:0)
或者使用dplyr
并删除重复项,因此如果tag.x == tag.y
则仅保留tag.x
library(dplyr)
test.df3 <- full_join(test.df1, test.df2, by = c("ID", "Year")) %>%
mutate(tag.y = if_else(tag.x == tag.y, NA_integer_, tag.y))