2015-02-10 4 views
0

у меня есть кадр данныхMean колонки на основе нескольких условий в R

DF <- data.frame(y1=c("AG","AG","AI","AI","AG","AI"), 
     y0=c(2,2,1,1,2,1), 
     y3=c(1994,1996,1997,1999,1994,1994),y4=c("AA","FB","AA","EB","AA","EB"), 
     mw3wuus=c(26,34,22,21,65,78), 
     Country_true=c("Antigua and Barbuda","Antigua and Barbuda","Anguilla","Anguilla","Antigua and Barbuda","Anguilla")) 

DF 
    y1 y0 y3 y4 mw3wuus   Country_true 
1 AG 2 1994 AA  26 Antigua and Barbuda 
2 AG 2 1996 FB  34 Antigua and Barbuda 
3 AI 1 1997 AA  22    Anguilla 
4 AI 1 1999 EB  21    Anguilla 
5 AG 2 1994 AA  65 Antigua and Barbuda 
6 AI 1 1994 EB  78    Anguilla 

И я пытаюсь создать новый столбец со средним переменным на основании того, что другие столбцы равны

Например, в примере, все должно быть одинаковым, но строки 5 и 1, для которых мне нужно вычислить среднее из mw3wuus, так как они имеют то же значение для y1, y0, y3 и y4.

ответ

4

Вы можете играть с aggregate

Например:

aggregate(DF$mw3wuus, FUN=mean, 
      by=list(y1=DF$y1, y0=DF$y0, y3=DF$y3, y4=DF$y4)) 

даст вам:

y1 y0 y3 y4 x 
1 AG 2 1994 AA 45.5 
2 AI 1 1997 AA 22.0 
3 AI 1 1994 EB 78.0 
4 AI 1 1999 EB 21.0 
5 AG 2 1996 FB 34.0 
+0

Моя догадка OP ищет 'с (DF, пр (mw3wuus, y1, y0, y3, y4, FUN = средняя))' вместо 'aggregate' ... –

+0

@DavidArenburg возможно ... но зачем хранить повторяющуюся строку, если вы хотите получить среднее значение? – nico

+0

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

3

Использование data.table

library(data.table) 
setDT(DF)[, Mean := mean(mw3wuus), by = .(y1, y0, y3, y4)][] 
# y1 y0 y3 y4 mw3wuus   Country_true Mean 
# 1: AG 2 1994 AA  26 Antigua and Barbuda 45.5 
# 2: AG 2 1996 FB  34 Antigua and Barbuda 34.0 
# 3: AI 1 1997 AA  22    Anguilla 22.0 
# 4: AI 1 1999 EB  21    Anguilla 21.0 
# 5: AG 2 1994 AA  65 Antigua and Barbuda 45.5 
# 6: AI 1 1994 EB  78    Anguilla 78.0 
1

Или используя dplyr пакет:

library(dplyr) 
DF %>% group_by(y1,y0,y3,y4) %>% summarise (x = mean(mw3wuus)) 
Смежные вопросы