r语言 - 一次创建几个新的缩放变量(加性或平均值)



假设我想创建两个新变量"mean1"one_answers";mean2"-其中:"表示"是"var1"的平均值和";var2"one_answers";mean2"是"var3"、"var4"one_answers"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])

但是如果我必须做很多这样的事情,它会变得乏味和笨拙。如果有一种更有效的方法,那就太好了。当我尝试使用循环或apply语句时,它永远不会正确运行。

提前感谢!

您可以这样做-其中您有想要聚合在列表中的变量。我想可能有一个更好的完全整洁的方法来做这件事,但这是有效的:

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

在2022-05-11由reprex包(v2.0.1)创建

最新更新