首页 > 解决方案 > 合并具有相同名称的数据框和总和列

问题描述

我在每个数据框中都有相对大量的年份,每个数据框中都有不同的国家名称。在我的可重现示例中,df2包含 country d,它不存在于df1. df3我可以使用几行代码来实现我的目标,如 所示。df3应该是 和 的总和df1df2条件是国家名称和年份。我确信有一种更简单的方法,但我自己找不到解决方案。非常欢迎您的帮助,我提前感谢您。

df1 <- data.frame(country = c("a", "b", "c"), year1 = c(1, 2, 3), year2 = c(1, 2, 3))
df2 <- data.frame(country = c("a", "b", "d"), year1 = c(1, 2, 3), year2 = c(1, 2, 3))

df3 <- merge(df1, df2, by = "country", all = TRUE) %>%
  replace_na(list(
    year1.x = 0, year1.y = 0,
    year2.x = 0, year2.y = 0)) %>%
  mutate(
    year1 = year1.x + year1.y,
    year2 = year2.x + year2.y) %>%
  select(-c(
    year1.x, year1.y,
    year2.x, year2.y))

这给出了我的预期结果,但我需要大量的手动输入才能在很长一段时间内实现它。

df3使用此代码生成:

  country year1 year2
1       a     2     2
2       b     4     4
3       c     3     3
4       d     3     3

标签: rdataframedplyrsum

解决方案


数据表

rbindlist(list(df1, df2))[, lapply(.SD, sum, na.rm =T), by = country]
   country year1 year2
1:       a     2     2
2:       b     4     4
3:       c     3     3
4:       d     3     3

推荐阅读