2016-11-30 5 views
1

Я пытаюсь суммировать набор данных, группируя по одному столбцу (F1) и получая среднее значение для других столбцов, за исключением того, что другие столбцы разделяются между числовым и множителем уровни. Я могу использовать ddply для суммирования числовых значений F2, но не уверен, как сделать то же самое для уровней факторов в F3. Я попытался захватить многократно повторяющийся множитель факторов по группам, но это не работает.Как суммировать числовые значения и значения уровня фактора одновременно в R

воспроизводимый пример

library(plyr) 
set.seed(37) 
df<-data.frame("F1"=rep(LETTERS[1:5],each = 3), 
       "F2"= 1:15, 
       "F3"= sample(c("Yes","No"), 15, replace=TRUE)) 
df2 <- ddply(df,~F1,summarise, 
        mF2=mean(F2), 
        mF3=tail(names(sort(table(df$F3))), 1)) 
> df 
    F1 F2 F3 
1 A 1 No 
2 A 2 Yes 
3 A 3 No 
4 B 4 Yes 
5 B 5 No 
6 B 6 No 
7 C 7 Yes 
8 C 8 Yes 
9 C 9 Yes 
10 D 10 Yes 
11 D 11 Yes 
12 D 12 No 
13 E 13 Yes 
14 E 14 Yes 
15 E 15 No 
> df2 
    F1 mF2 mF3 
1 A 2 Yes 
2 B 5 Yes 
3 C 8 Yes 
4 D 11 Yes 
5 E 14 Yes 

Вместо df2 должен выглядеть следующим образом:

> df2 
    F1 mF2 mF3 
1 A 2 No 
2 B 5 No 
3 C 8 Yes 
4 D 11 Yes 
5 E 14 Yes 

Я был бы заинтересован попробовать с dplyr или другим способом, если показано, каким образом.

+4

Почему вы используете 'таблицу (ДФ $ F3)' вместо е только 'таблицы (F3)'? Таким образом, вы делаете это для всего набора данных вместо подмножества. Вы можете легко преобразовать свой plyr-код в dplyr, выполнив что-то вроде 'df%>% group_by (F1)%>% summary (mF2 = mean (F2), mF3 = tail (имена (sort (table (F3))) 1)) ' –

ответ

0

Мы можем использовать подобный вариант в dplyr

library(dplyr) 
df %>% 
    group_by(F1) %>% 
    summarise(mF2 = mean(F2), mF3 = tail(names(sort(table(F3))),1)) 
+0

То, что не обращается к« неожиданному »поведению, было у –

+0

@DavidArenburg. Я смотрел на« Я бы попробовал это в dplyr » – akrun

+0

@akrun: выплевывает 1 строку. что не хватает для его соответствия выходу ddply выше? – val

Смежные вопросы