如何对 R 中的多个变量/列进行拆分应用组合
How to Split-Apply-Combine for several variables / columns in R
我想按组对多个变量执行一个函数。
虚假数据;
df<-data.frame(rnorm(100,mean=10),
rnorm(100,mean=15),
rnorm(100,mean=20),
rep(letters[1:10],each=10)
)
colnames(df)<-c("var1","var2","var3","group1")
在这种特殊情况下,我想按组对每个变量进行均值居中。我想要 return 一个包含原始变量和居中变量的数据框。
通常我为此使用 PLYR 包;
library(plyr)
ddply(df, "group1", transform, centered_var1= scale(var1, scale=FALSE))
但是,我还没有能够成功地循环这个函数,或者想出另一种最少代码的方法来做到这一点。
我对非 PLYR 解决方案持开放态度...我的主要标准是将代码保持在最低限度。
这是你想要的吗?
ddply(df, "group1", transform, centered_var1= scale(var1, scale=FALSE),
centered_var2 = scale(var2, scale=FALSE),
centered_var3 = scale(var3, scale=FALSE))
使用dplyr
library(dplyr)
df %>% group_by(group1) %>%
mutate_each(funs(scale(., scale=F))) -> res
colwise
函数可能就是您要找的。
library("plyr")
ddply(df, .(group1), colwise(scale, scale = FALSE))
我想按组对多个变量执行一个函数。
虚假数据;
df<-data.frame(rnorm(100,mean=10),
rnorm(100,mean=15),
rnorm(100,mean=20),
rep(letters[1:10],each=10)
)
colnames(df)<-c("var1","var2","var3","group1")
在这种特殊情况下,我想按组对每个变量进行均值居中。我想要 return 一个包含原始变量和居中变量的数据框。
通常我为此使用 PLYR 包;
library(plyr)
ddply(df, "group1", transform, centered_var1= scale(var1, scale=FALSE))
但是,我还没有能够成功地循环这个函数,或者想出另一种最少代码的方法来做到这一点。
我对非 PLYR 解决方案持开放态度...我的主要标准是将代码保持在最低限度。
这是你想要的吗?
ddply(df, "group1", transform, centered_var1= scale(var1, scale=FALSE),
centered_var2 = scale(var2, scale=FALSE),
centered_var3 = scale(var3, scale=FALSE))
使用dplyr
library(dplyr)
df %>% group_by(group1) %>%
mutate_each(funs(scale(., scale=F))) -> res
colwise
函数可能就是您要找的。
library("plyr")
ddply(df, .(group1), colwise(scale, scale = FALSE))