此问题被标记为重复,但我想对我的问题的答案表示赞同。另一方提供的解决方案不足以达到我的目的(我试过它们取得了一点成功),而且他们也依赖于看似微妙和不必要的软件包。我很欣赏用户Stewart Ross提供的问题,因为他们能够使用一个广泛使用且非常熟悉的软件包(dplyr)使用一个非常简单的解决方案来回答这个问题
已经提出了类似的问题,这看起来很简单,但我发现的所有答案都已经产生了我已经拥有的东西。 我似乎无法保留两个数据框中的所有唯一行值。在我的情况下,我有两个数据框,我正在通过关键列“Code”合并。但是,df1来自前一年,因此它具有“代码”,即在df2中找不到的旧代码。同样地,df2具有在df1中找不到的新代码。
所以让我们假设他们看起来像这样:
df1
Code Value1
A 10
B 20
C 50
df2
Code Value2
A 30
D 40
E 60
使用我正在使用的当前代码 df3< - left_join(df2,df1,by =“Code”)
所以我得到的是:
df3
Code Value1 Value2
A 10 30
D n.a. 40
E n.a. 60
如果我只关心代表今年的“代码”,那就没关系。 我想要的输出保留了上一年的旧代码。我希望df3类似于以下内容:
df3
Code Value1 Value2
A 10 30
B 20 n.a.
C 50 n.a.
D n.a. 40
E n.a. 60
所以我的问题是我有两个不同代码的数据框,我想将它们合并在一起,同时保留所有代码。我无法使用left_join,rbind或subsetting完成此操作。
非常感谢任何帮助!
答案 0 :(得分:0)
dplyr中的full_join函数实现了这一点:
library(dplyr)
dfa = data.frame(code = c("A", "B" , "C"), value1 = c(10, 20, 50), stringsAsFactors = FALSE)
dfb = data.frame(code = c("A", "D" , "E"), value2 = c(30, 40, 60), stringsAsFactors = FALSE)
full_join(dfa, dfb)
Joining, by = "code"
code value1 value2
1 A 10 30
2 B 20 NA
3 C 50 NA
4 D NA 40
5 E NA 60