我想为100个列做lag
和cummean
。我更喜欢使用数据框将参数添加到函数中。我已尝试使用dplyr
进行惰性eval,但在使用mapply
执行函数时失败,并将数据框的列作为参数。我可以做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))))
答案 0 :(得分:1)
我们可以使用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]