2015-04-27 2 views
0

Я хотел бы вычислить среднее значение data.frame по двум переменным. См пример data.frame (экстракции) ниже:Вычисление среднего путем выбора из двух столбцов в кадре данных

  Station Time Year Month Value   
     ARO 199501 1995  1  69 
     ARO 199502 1995  2  87 
     ARO 199503 1995  3  107 
     ARO 199601 1996  1  35 
     ARO 199602 1996  2  46 
     ARO 199603 1996  3  50 
     ANT 200401 2004  1  87 
     ANT 200402 2004  2  115 
     ANT 200403 2004  3  110 
     ANT 200501 2005  1  80 
     ANT 200502 2005  2  122 
     ANT 200503 2005  3  107 

Для того, чтобы быть более подробным: Я хотел бы вычислить среднее значение для каждой станции и месяца, так что, например, Среднее значение для ARO в месяце 1 = (69 + 35)/2, среднее значение для ANT в месяце 1 = (87 + 80)/2

Год не имеет значения, так как я хотел бы иметь среднее значение для периода от 20 лет на каждый месяц и на станцию.

Мой информационный кадр огромен с 61 станцией и 12 месяцами для таймсеров по 20 лет каждый.

Я пробовал несколько вещей, таких как split или aggregate и ddply, но все это не сработало. В конце я хотел бы иметь новый кадр данных, как в следующем:

Station Month Valuemean 
ARO 1 52 
ARO 2 66.5 
ARO 3 78.5 
ANT 1 83.5 
ANT 2 118.5 
ANT 3 108.5 

Было бы замечательно, если у вас есть какие-то идеи, чтобы реализовать его. Большое спасибо!

PS: Я новичок R;)

+0

'aggregate (Value ~ Station + Month, df, mean)'? –

ответ

2

Предполагая, что вы данные называют df, вы можете попробовать aggregate

aggregate(Value~Month+Station, data=df, FUN = mean) 
    Month Station Value 
1  1  ANT 83.5 
2  2  ANT 118.5 
3  3  ANT 108.5 
4  1  ARO 52.0 
5  2  ARO 66.5 
6  3  ARO 78.5 
3

Вы можете использовать data.table пакет:

library(data.table) 
setDT(df)[,mean(Value), by=list(Month, Station)] 
1

Использование пакет dplyr, если ваш data.frame называется dat:

library(dplyr) 
means <- dat %>% 
    group_by(Station, Month) %>% 
    summarise(Valuemean = mean(Value, na.rm = TRUE))