1

我想按组对几个变量执行一个函数。

虚假数据;

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")

在这种特殊情况下,我想按组对每个变量进行平均中心化。我想返回一个带有原始变量和居中变量的数据框。

通常我为此使用 PLYR 包;

library(plyr)    
ddply(df, "group1", transform, centered_var1= scale(var1, scale=FALSE))

但是,我无法成功循环这​​个函数,或者想出另一种最小代码的方法来做到这一点。

我对非 PLYR 解决方案持开放态度……我的主要标准是将代码保持在最低限度。

4

3 回答 3

3

使用dplyr

library(dplyr)
df %>% group_by(group1) %>%
  mutate_each(funs(scale(., scale=F))) -> res
于 2015-07-15T19:56:45.327 回答
3

colwise功能可能是您正在寻找的。

library("plyr")
ddply(df, .(group1), colwise(scale, scale = FALSE))
于 2015-07-15T20:24:35.993 回答
1

这是你想要的吗?

ddply(df, "group1", transform, centered_var1= scale(var1, scale=FALSE),
      centered_var2 = scale(var2, scale=FALSE),
      centered_var3 = scale(var3, scale=FALSE))
于 2015-07-15T19:53:35.110 回答