如何在不复制原始数据值的情况下加入 R 中的数据帧

How to join data frames in R without duplicating original data values

我有 2 个数据框(DF1DF2),其中 1 个想通过一个名为 "acc_num" 的唯一值将它们连接在一起。在 DF2 中,acc_num A 支付了两次,B 支付了三次。数据框如下

DF1:

 acc_num     total_use    sales
    A           433        145
    A            NA          2
    A            NA         18
    B           149         32

DF2:

   acc       payment   
    A           150
    A            98
    B            44
    B            15
    B            10

我想要的输出是:

 acc_num    total_use    sales    payment
    A            433       145       150
    A             NA         2        98
    A             NA        18        NA
    B            149        32        44
    B             NA        NA        15
    B             NA        NA        10

我已经尝试了 full_joinmerge,但输出结果并不理想。我无法解决这个问题,因为我仍然是 R 的初学者,还没有找到解决方案。

我使用的代码示例是

test_full_join <- DF1 %>% full_join(DF2, by = c("acc_num" = "acc"))

显示的输出是:

 acc_num       total_use   sales     payment
    A             433       145        150
    A             433       145         98
    A              NA         2        150
    A              NA         2         98
    A              NA        18        150
    A              NA        18         98
    B             149        32         44
    B             149        32         15
    B             149        32         10

这与我最后想要的输出相反, 我关心的是获得 total_usesalespayment 的总和。 这个输出肯定会给我错误的解释 用于稍后的数据可视化。

我们可能需要根据 'acc_num'

通过 row_number() 进行连接
library(dplyr)
df1 %>%
     group_by(acc_num) %>%
     mutate(grpind = row_number()) %>% 
     full_join(df2 %>% 
                   group_by(acc_num = acc) %>%
                   mutate(grpind = row_number())) %>%
     select(acc_num, total_use, sales, payment)
# A tibble: 6 x 4
# Groups:   acc_num [2]
#  acc_num total_use sales payment
#  <chr>       <int> <int>   <int>
#1 A             433   145     150
#2 A              NA     2      98
#3 A              NA    18      NA
#4 B             149    32      44
#5 B              NA    NA      15
#6 B              NA    NA      10

数据

df1 <- structure(list(acc_num = c("A", "A", "A", "B"), total_use = c(433L, 
NA, NA, 149L), sales = c(145L, 2L, 18L, 32L)), class = "data.frame",
   row.names = c(NA, 
-4L))

df2 <- structure(list(acc = c("A", "A", "B", "B", "B"), payment = c(150L, 
98L, 44L, 15L, 10L)), class = "data.frame", row.names = c(NA, 
-5L))