Как объединить кадры данных в R без дублирования исходных значений данных - PullRequest
1 голос
/ 23 апреля 2019

У меня есть 2 кадра данных (DF1 & DF2), и 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_join и merge, но вывод был не таким, как хотелось бы. Я не мог решить это, поскольку я все еще новичок в 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_use, sales и payment. Этот вывод определенно даст мне неверную интерпретацию для визуализации данных позже.

1 Ответ

0 голосов
/ 23 апреля 2019

Нам может потребоваться объединение на row_number() на основе 'acc_num'

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...