是否可以在不复制列值的情况下,使用R中的full_join之类的方法连接数据帧



我试图按日期组合到付款流,但当我使用full_join时,它会复制一些付款流,使分析变得不可能。

例如,当我使用示例数据运行此代码时:

library(tidyquant)
v1 = c("a", "a", "b", "b", "c", "c")
v2 = c(1,2,3,4,3,4)
v3 = c("a", "b", "c")
v4 = c(10,20,30)
df1 = data.frame(v1, v2)
df2 = data.frame(v3, v4)
full_join(df1, df2, by = c("v1" = "v3"))

我得到这个输出:

v1 v2 v4
1  a  1 10
2  a  2 10
3  b  3 20
4  b  4 20
5  c  3 30
6  c  4 30

但我想要这个:

v1 v2 v4
1  a  1 10
2  a  2 NA
3  b  3 20
4  b  4 NA
5  c  3 30
6  c  4 NA

有没有办法,使用dplyrs join或其他函数来获得我想要的输出。

library(data.table)
#convert to data.table format
setDT(df1); setDT(df2)
#update join non-duplicated v1-values
df1[!duplicated(v1), v4 := df2[df1[!duplicated(v1),], v4, on = .(v3 = v1)]]
#    v1 v2 v4
# 1:  a  1 10
# 2:  a  2 NA
# 3:  b  3 20
# 4:  b  4 NA
# 5:  c  3 30
# 6:  c  4 NA    

最新更新