以最高速度和最少量的代码为数据框创建100个新列的最佳实践是什么?

时间:2017-02-22 09:27:25

标签: r dataframe dplyr mapply

我想为100个列做lagcummean。我更喜欢使用数据框将参数添加到函数中。我已尝试使用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))))

1 个答案:

答案 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]