2013-02-27 1 views
3

Я работаю с набором данных, который имеет показания температуры один раз в час, 24 часа в сутки в течение более 100 лет. Я хочу получить среднюю температуру за каждый день, чтобы уменьшить размер моего набора данных. Заголовки выглядят так:Как рассчитать средние значения больших наборов данных

 YR MO DA HR MN TEMP 
    1943 6 19 10 0 73 
    1943 6 19 11 0 72 
    1943 6 19 12 0 76 
    1943 6 19 13 0 78 
    1943 6 19 14 0 81 
    1943 6 19 15 0 85 
    1943 6 19 16 0 85 
    1943 6 19 17 0 86 
    1943 6 19 18 0 86 
    1943 6 19 19 0 87 

и т.д. для 600 000+ точек данных.

Как я могу запустить вложенную функцию для вычисления среднесуточной температуры, чтобы сохранить YR, MO, DA, TEMP? Как только у меня есть это, я хочу, чтобы иметь возможность посмотреть средние средние значения &, подсчитайте среднюю температуру в течение месяца января через 30 лет. Как мне это сделать?

+0

Два предупреждения: быть в курсе, чтобы удалить неполные дни (или интерполировать их), и это простое значение в течение всех часов ** не является ** то, что люди с метеоризмом обычно считают средней температурой - существуют некоторые глупые стандарты, такие как температура от 9:00 с весом 0,4 плюс температура от 13:00 с 0,6. – mbq

+0

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

ответ

10

В одном шаге вы можете сделать это:

meanTbl <- with(datfrm, tapply(TEMP, ISOdate(YR, MO, DA), mean)) 

Это дает вам даты и время отформатированы индекс, а также значение. Если вы хотите просто даты как символ без времени задней:

meanTbl <- with(dat, tapply(TEMP, as.Date(ISOdate(YR, MO, DA)), mean)) 

среднемесячными может быть сделано с:

monMeans <- with(meanTbl, tapply(TEMP, MO, mean)) 
+0

спасибо! я использовал это, хотя я решил пойти с пакетом plyr, прокомментированным ниже – user2113985

2

Ваш первый вопрос может быть достигнуто с помощью plyr пакета:

library(plyr) 
daily_mean = ddply(df, .(YR, MO, DA), summarise, mean_temp = mean(TEMP)) 

По аналогии с вышеуказанным решением ежемесячные средства:

monthly_mean = ddply(df, .(YR, MO), summarise, mean_temp = mean(temp)) 

или получить ежемесячные средние по всему набору данных (30 лет, иначе нормалей климата), а не в год:

monthly_mean_normals = ddply(df, .(MO), summarise, mean_temp = mean(temp)) 
+0

Привет, спасибо! Я использовал это, чтобы сравнить мои данные и их фантастические результаты. Когда я вычисляю month_mean_normals, все результаты возвращаются «NA», я что-то пропустил? Как я могу рассчитать ежемесячные (или ежедневные) средства в 1950-1980 годах? – user2113985

+0

Прочитайте документацию 'mean', в частности' na.rm'. –

6

Вы можете сделать это с aggregate:

# daily means 
aggregate(TEMP ~ YR + MO + DA, FUN=mean, data=data) 

# monthly means 
aggregate(TEMP ~ YR + MO, FUN=mean, data=data) 

# yearly means 
aggregate(TEMP ~ YR, FUN=mean, data=data) 

# monthly means independent of year 
aggregate(TEMP ~ MO, FUN=mean, data=data) 
+0

спасибо! я использовал это, хотя я решил пойти с пакетом plyr, прокомментированным ниже – user2113985

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

  • Нет связанных вопросов^_^