#r
#r
Вопрос:
df1
acc_id || s1_2005 || s1_2006
87 1 1
df2
acc_id || s2_2005 || s2_2006
87 2 3
вывод
df3
acc_id ||s1_2005 s2_2005 || s1_2006 s2_2006
87 3 4
Комментарии:
1. Спасибо за информацию. Я буду иметь это в виду.
Ответ №1:
Для этого есть несколько способов. Один из способов — использовать rbind()
для объединения данных в один фрейм данных, а затем для aggregate()
передачи данных на уровень acc_id.
# example data
df1 <- data.frame(
acc_id = c(87, 88),
s1_2005 = c(1, 2),
s1_2006 = c(1, 2))
df2 <- data.frame(
acc_id = c(87, 89),
s1_2005 = c(2, 4),
s1_2006 = c(3, 4))
# combine data by stacking
df <- rbind(df1, df2)
# sum s1_2005 and s1_2006 by acc_id
res <- aggregate(df[ , c("s1_2005", "s1_2006")], by=df["acc_id"], FUN=sum)
# print result
res
Результат:
acc_id s1_2005 s1_2006
87 3 4
88 2 2
89 4 4
Комментарии:
1. Спасибо за ваш ответ, но мне нужно добавить s1_2005 и s2_2005 для каждого account_id.
2. Это именно то, что делает мой код. Я использовал 3 идентификатора учетной записи (87, 88 и 89), чтобы вы могли видеть, как данные для идентификатора 87 складываются вместе.
Ответ №2:
Используя dplyr
library(dplyr)
bind_rows(df1, df2) %>%
group_by(acc_id) %>%
summarise(across(everything(), sum), .groups = 'drop')
-вывод
# A tibble: 3 x 3
# acc_id s1_2005 s1_2006
# <dbl> <dbl> <dbl>
#1 87 3 4
#2 88 2 2
#3 89 4 4
данные
df1 <- data.frame(
acc_id = c(87, 88),
s1_2005 = c(1, 2),
s1_2006 = c(1, 2))
df2 <- data.frame(
acc_id = c(87, 89),
s1_2005 = c(2, 4),
s1_2006 = c(3, 4))
Комментарии:
1. Большое вам спасибо