我有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
的总和。
此输出肯定会给我错误的解释
以便稍后进行数据可视化。
答案 0 :(得分:0)
我们可能需要根据'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))