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

如何使用apply与mutate函数创建新变量?基于分组数据的组内比值计算需求

解决方案:用dplyr快速实现分组后按组首值计算新变量

嘿,你这个需求其实用dplyr自带的函数就能轻松解决,不用折腾apply啦!咱们直接在你已经分组的基础上,用mutate结合first()函数就能搞定。

完整代码示例

library(dplyr)

# 先创建你的数据框
df <- data.frame(
  name = c(rep("AUS",5), rep("FRA",5), rep("SPA",5)),
  Date = rep(seq(as.Date("2020/1/1"), as.Date("2020/1/5"), "days"),3),
  mean = c(19, 2, 22, 13, 23, 24, 7, 14, 27, 30, 4, 26, 1, 18, 5)
)

# 分组后计算新变量
df <- df %>%
  group_by(name) %>%
  mutate(new_var = first(mean) / mean) %>%
  ungroup() # 记得取消分组,避免后续操作受影响

# 查看结果
print(df)

为什么这个方法有效?

  • group_by(name)已经把数据按国家分组了,接下来mutate里的first(mean)会自动提取每组的第一个mean值,比如AUS组就是19,FRA组是24,SPA组是4。
  • 然后用这个组首值除以当前行的mean,就得到了你想要的结果:每组第一行是组首值/组首值=1,后面的行依次是组首值/对应行mean,完全符合你的需求。

结果预览

你会看到新变量new_var的取值和你预期的一致:

# A tibble: 15 × 4
   name  Date        mean new_var
   <chr> <date>     <dbl>   <dbl>
 1 AUS   2020-01-01    19    1    
 2 AUS   2020-01-02     2    9.5  
 3 AUS   2020-01-03    22    0.864
 4 AUS   2020-01-04    13    1.46 
 5 AUS   2020-01-05    23    0.826
 6 FRA   2020-01-01    24    1    
 7 FRA   2020-01-02     7    3.43 
 8 FRA   2020-01-03    14    1.71 
 9 FRA   2020-01-04    27    0.889
10 FRA   2020-01-05    30    0.8  
11 SPA   2020-01-01     4    1    
12 SPA   2020-01-02    26    0.154
13 SPA   2020-01-03     1    4    
14 SPA   2020-01-04    18    0.222
15 SPA   2020-01-05     5    0.8  

内容的提问来源于stack exchange,提问作者Eve Chanatasig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:57:42