一次创建几个新的缩放变量(加法或均值)

Creating Several New Scaled Variables at Once (additive or mean)

假设我想创建两个新变量——“mean1”和“mean2”——其中:“mean1”是“var1”和“var2”的平均值,“mean2”是“var3”的平均值、“var4”和“var5”。这是一个示例数据框:

set.seed(23424)
df <- data.frame(var1 = runif(5, 0, 5),
                 var2 = runif(5, 0, 5),
                 var3 = runif(5, 0, 5),
                 var4 = runif(5, 0, 5),
                 var5 = runif(5, 0, 5))

我可以用类似的东西暴力破解它:

df$mean1 <- rowMeans(df[,1:2])
df$mean2 <- rowMeans(df[,3:5])

但如果我必须经常做这样的事情,它会变得乏味和笨拙。如果有一种方法可以更有效地执行此操作,那就太好了。当我尝试为此使用循环或应用语句时,它永远不会正确运行。

提前致谢!

你可以做这样的事情 - 你有你想要聚合在列表中的变量。我认为可能有更好的完全整洁的方法来做到这一点,但这有效:

library(dplyr)
set.seed(23424)
df <- data.frame(var1 = runif(5, 0, 5),
                   var2 = runif(5, 0, 5),
                   var3 = runif(5, 0, 5),
                   var4 = runif(5, 0, 5),
                   var5 = runif(5, 0, 5))
l <- list(mean1 = c("var1", "var2"), 
          mean2 = c("var3", "var4", "var5"))
  

for(i in 1:length(l)){
  df <- df %>% 
    mutate(!!sym(names(l)[i]) := rowMeans(cur_data()[,l[[i]]]))
}
df
#>       var1      var2      var3      var4      var5    mean1     mean2
#> 1 1.892178 0.2488837 4.3203682 2.6517051 1.2454473 1.070531 2.7391735
#> 2 1.390501 2.9131956 0.8851525 3.9931125 1.8389664 2.151848 2.2390771
#> 3 3.131567 4.8579541 0.1950122 3.9789130 4.6969826 3.994761 2.9569693
#> 4 4.425019 2.5628706 0.6257656 0.1144681 1.8303231 3.493945 0.8568523
#> 5 2.621068 4.7636304 1.2762756 1.1706242 0.1881539 3.692349 0.8783512

reprex package (v2.0.1)

创建于 2022-05-11