循环遍历列并应用ddply

时间:2015-05-25 13:14:50

标签: r

我的数据框如下所示:

Stage  Var1   var2  Var1   var2
A        1      11    9     12
A        2      NA    3     13
A       NA      NA    2     10
B        4      14    1      4
B       NA      NA    4      2
B        6      16    6      8
B        7      17  100      9
C        8      NA    4      6
C        9      19   34     12
C       10      NA    5     18
C        1       0    6      3

我想使用ddply拆分数据框,为每个组应用mean()。之后它必须为所有列循环。因此,我正在尝试这样的事情:

for(i in names(NewInput)){
NewInput[[i]] <- ddply(NewInput , "Model_Stage", function(x) {
mean.Cycle2 <- mean(x$NewInput[[i]])
})
}

上面的代码在没有for循环的情况下工作正常(即)ddply可以正常使用一个变量。但是,当我使用for循环运行列时,我收到了几个警告

In loop_apply(n, do.ply):argument is not numeric or logical: returning           NA                                            

问题:

- &GT;如何使用for循环遍历所有变量的ddply?

- &GT;是否可以使用apply()?

谢谢。

-Chris

1 个答案:

答案 0 :(得分:1)

你可以尝试

library(plyr)
ddply(df1, .(Stage), colwise(mean, na.rm=TRUE))

其他选项包括

library(dplyr)
df1 %>%
     group_by(Stage) %>%
     summarise_each(funs(mean=mean(., na.rm=TRUE)))

或者

library(data.table)
setDT(df1)[, lapply(.SD, mean, na.rm=TRUE), Stage]

或使用基础R

aggregate(.~Stage, df1, FUN=mean, na.rm=TRUE, na.action=NULL)