2015-05-25 4 views
1

Моего кадра данных выглядит следующим образом:Loop через колонку и применять ddply

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 

Я хотел бы разделить dataframe с помощью ddply, нанесите среднее() для каждой группы. Позже он должен быть зациклен для всех столбцов. Поэтому я пытаюсь что-то вроде этого:

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

Приведенный выше код работает отлично без цикл (то) ddply отлично работает с одной переменной. Однако, когда я бегу через колонки, используя для цикла я получаю несколько предупреждений

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

Вопрос:

-> Как Переберите ddply по всем переменным, используя для цикла?

-> Можно ли использовать apply()?

спасибо.

-Крис

+0

Каков ваш ожидаемый результат? Вы просто рассчитываете среднее значение для каждого столбца на группу? –

+0

Да, я просто вычисляю среднее значение для каждого столбца на группу. – Chris

ответ

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) 
Смежные вопросы