r - 合并具有相同名称的数据框和总和列
问题描述
我在每个数据框中都有相对大量的年份,每个数据框中都有不同的国家名称。在我的可重现示例中,df2
包含 country d
,它不存在于df1
. df3
我可以使用几行代码来实现我的目标,如 所示。df3
应该是 和 的总和df1
,df2
条件是国家名称和年份。我确信有一种更简单的方法,但我自己找不到解决方案。非常欢迎您的帮助,我提前感谢您。
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
解决方案
数据表
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
推荐阅读
- html - 图像悬停效果同时
- typescript - 使用复杂的“isEmpty”检查时的类型推断
- java - 使用 Gson 将对象转换为列表
- oracle - 没有用于在 Oracle 中添加外键约束的 Alter 表的操作定义
- amazon-web-services - 如何使用 cloudformation 模板为不同的 elasticbeanstack 应用环境使用相同的应用负载均衡器?
- cmake - CMake系统环境变量扩展
- python - Python:将实例变量传递给类方法
- c - 如果使用 IOCP 进行基本信令,哪个句柄传递给 CreateIoCompletionPort?
- javascript - AngularJs + webpack - 无法读取未定义的属性“可导航”
- java - 在设置的最小值和最大值之间设置编辑文本输入