R语言实现数据框按组求和新增列且不生成新grouped_df
实现代码
你可以选择以下任意一种方式实现需求,两种方案都不会生成grouped_df类对象,仅在原数据框新增目标字段:
1. 基础R实现(无需加载第三方包)
直接用内置的ave()函数即可实现分组聚合后对齐原数据长度的计算:
df$family_income <- ave(df$income, df$id_family, FUN = sum)
ave()函数会自动按照第二个参数的分组维度,对第一个参数执行指定的FUN运算,返回和原数据行数完全一致的向量,直接赋值即可。
2. dplyr实现(适合习惯tidyverse语法的场景)
如果你使用dplyr 1.1.0及以上版本,可以用临时分组参数.by,计算完成后自动解除分组,不会产生grouped_df对象:
library(dplyr) df <- df %>% mutate(family_income = sum(income), .by = id_family)
效果验证
你可以用以下代码构造示例数据测试:
df <- data.frame( id_person = c("001", "002", "003", "004", "005"), income = c(100, 120, 100, 220, 300), id_family = c("A1", "B2", "B5", "A1", "B5") )
运行上述任意代码后,即可得到你预期的结果,且class(df)不会包含grouped_df类。
内容的提问来源于stack exchange,提问作者Igor Mendonça
相关产品推荐
相关产品推荐

