我想对100列进行lag
和cummean
。我更喜欢使用dataFrame将参数添加到函数中。我尝试使用dplyr
进行懒惰评估,但是在使用mapply
进行函数时,它将失败,而DataFrame的列则是参数。我可以做基础r,但恐怕它可能会降低速度,尤其是在数据范围内的700个变量乘60,000行。
数据帧之前
date name team score1 score2 height
1/1/2001 Bill eagles 1 2 5
1/1/2001 George eagles 2 7 2
1/1/2001 Aaron eagles 1 2 4
1/2/2001 Bill eagles 1 2 5
1/2/2001 George eagles 2 4 2
1/2/2001 Aaron eagles 2 2 4
1/3/2001 Bill eagles 2 3 5
1/3/2001 George eagles 2 7 2
1/3/2001 Aaron eagles 1 2 4
数据框后
date name team score1 score2 height score1_avg height_average
1/1/2001 Bill eagles 1 2 5 NA NA
1/1/2001 George eagles 2 7 2 NA NA
1/1/2001 Aaron eagles 1 2 4 NA NA
1/2/2001 Bill eagles 1 2 5 1.33 3.66
1/2/2001 George eagles 2 4 2 1.33 3.66
1/2/2001 Aaron eagles 2 2 4 1.33 3.66
1/3/2001 Bill eagles 2 3 5 1.5 3.66
1/3/2001 George eagles 2 7 2 1.5 3.66
1/3/2001 Aaron eagles 1 2 4 1.5 3.66
这是我为一列所做的,但我需要可扩展100s
df %>%
group_by(team) %>%
mutate(score1_avg = lag(cummean((score1))))
我们可以通过在不复制
的情况下分配(:=
)来使用data.table
library(data.table)
setDT(df)[, paste0(names(df)[4:6], "avg") := lapply(.SD, function(x)
shift(cummean(x))[[1]]), team, .SDcols = score1:height]