如何在DataFrame中基于现有行计算并添加新行(dplyr实现遇阻)
问题描述
需要在DataFrame中添加c行,c行的amount是对应日期下a行的amount减去b行的amount的结果。原始数据如下:
variable <- c("a","b","a","b") date <- c("Jan 22","Jan 22", "Feb 22","Feb 22") amount <- c(100,20,100,20) df <- data.frame(variable, date, amount)
期望得到的DataFrame:
variable date amount -------- ---- ------ a Jan 22 100 b Jan 22 20 c Jan 22 80 a Feb 22 100 b Feb 22 20 c Feb 22 80
解决方案(使用dplyr)
可以通过分组计算、生成新行再合并的方式实现:
library(dplyr) # 生成c行数据 c_rows <- df %>% group_by(date) %>% summarise( variable = "c", amount = sum(amount[variable == "a"] - amount[variable == "b"]), .groups = "drop" ) # 合并原数据和c行,再按日期排序整理 result_df <- df %>% bind_rows(c_rows) %>% arrange(date, variable) print(result_df)
代码说明
- 分组计算:按
date分组,对每个日期计算a的amount与b的amount的差值,生成c行的记录。 - 合并数据:用
bind_rows将原数据和生成的c行合并。 - 排序整理:按
date和variable排序,让结果结构与预期一致。
运行后即可得到包含c行的目标DataFrame。
内容的提问来源于stack exchange,提问作者4agreements
相关产品推荐
相关产品推荐

