You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:10:32