R语言:如何按program将value除以出现次数计算区域单份金额?
在R中计算项目单区域平均资助金额
方法1:使用dplyr包(tidyverse风格)
先构造示例数据,再按program分组,计算每组内总金额除以区域数量,得到单区域平均金额:
# 构造你的示例数据框 df <- data.frame( program = c("a", "b", "b", "b", "c", "c", "d", "e", "f", "f"), region = c("01", "02", "03", "04", "01", "03", "02", "01", "01", "04"), value = c(100, 250, 250, 250, 200, 200, 600, 700, 100, 100) ) library(dplyr) # 计算new_value并保留三位小数 df_result <- df %>% group_by(program) %>% mutate(new_value = round(value / n(), 3)) %>% ungroup() print(df_result)
运行后输出与你期望的一致:
# A tibble: 10 × 4 program region value new_value <chr> <chr> <dbl> <dbl> 1 a 01 100 100 2 b 02 250 83.3 3 b 03 250 83.3 4 b 04 250 83.3 5 c 01 200 100 6 c 03 200 100 7 d 02 600 600 8 e 01 700 700 9 f 01 100 50 10 f 04 100 50
方法2:使用基础R的ave函数
不需要加载额外包,用基础R的ave函数即可按分组计算:
# 构造示例数据框 df <- data.frame( program = c("a", "b", "b", "b", "c", "c", "d", "e", "f", "f"), region = c("01", "02", "03", "04", "01", "03", "02", "01", "01", "04"), value = c(100, 250, 250, 250, 200, 200, 600, 700, 100, 100) ) # 计算new_value并保留三位小数 df$new_value <- round(with(df, ave(value, program, FUN = function(x) x / length(x))), 3) print(df)
输出结果与方法1完全匹配。
内容的提问来源于stack exchange,提问作者flâneur
相关产品推荐
相关产品推荐

