R-以最高速度和最低代码量创建100列新列的最佳实践



我想对100列进行lagcummean。我更喜欢使用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]

相关内容

  • 没有找到相关文章