如何在R语言中不使用for循环为数据框添加累积均值列?
不用for循环给R数据框添加累积均值列
直接用向量化操作是最省心也最高效的办法,不用循环也不用map,靠cumsum()就能搞定:
# 测试数据 a = data.frame( n = c(1:10), Xn = c(-0.502,0.132,-0.079,0.887,0.117,0.319,-0.582,0.715,-0.825,-0.360) ) # 一行代码生成累积均值列 a$Xn_bar <- cumsum(a$Xn) / seq_along(a$Xn)
要是你一定要用purrr的map系列函数(本质是封装了循环的隐式写法),也能实现:
library(purrr) # 用map_dbl返回数值向量,直接赋值为新列 a$Xn_bar <- map_dbl(seq_len(nrow(a)), ~mean(a$Xn[1:.x]))
结果核对
两种方法和你原来的for循环结果完全一致,比如前三个值的累积均值:
- 第1个:-0.502
- 第2个:(-0.502+0.132)/2 = -0.185
- 第3个:(-0.502+0.132-0.079)/3 ≈ -0.1497
效率提醒
向量化的cumsum方法比循环、map快得多,数据量越大差距越明显——毕竟R的向量化操作是底层优化过的,没有循环带来的额外开销。
内容的提问来源于stack exchange,提问作者ting_H
相关产品推荐
相关产品推荐

