2014-10-20 2 views
0

Теперь я изучаю R и использую пакет SEAS, чтобы помочь мне с некоторыми вычислениями в R, а данные - в том же формате, что и пакет SEAS. Это время серииСовокупное количество значений времени, превышающих пороговое значение, по годам

require(seas) 
data(mscdata) 
dat.int <- (mksub(mscdata, id=1108447)) 

заголовок данных и 20 лет данных

year yday date t_max t_min t_mean rain snow precip 

Однако, теперь мне нужно рассчитать количество дней в каждом месяце количество осадков будет> = 1,0 мм. Так в конце этого. Я бы два столбца (каждый месяц в каждом году и общей # дней в каждом месяце осадков> = 1.0mm)

Я не уверен, как написать этот код и любая помощь будет оценена

благодарственное вы

Lam

+1

Поместите некоторый воспроизводимый код R, используя 'dput (yourdataframe)'. * «данные имеют тот же формат, что и пакет SEAS» * неприемлем. – smci

+1

Привет, я не уверен, что вы спрашиваете меня ... но я отредактировал. Надеюсь, что это имеет смысл. Это моя первая попытка программирования. Пожалуйста, простите меня, если не правильно, выражая правильные вещи – Lam

ответ

2

теперь мне нужно рассчитать количество дней в каждом месяце количество осадков составляет> = 1.0мм. Так в конце этого. У меня было бы два столбца (каждый месяц в каждом году и общее количество дней в каждом месяце осадков> = 1,0 мм)

1) Так dat.int $ date - объект Date. Первый шаг - вам нужно создать новый столбец dat.int$yearmon, извлекая год-месяц, например. используя zoo::yearmon Extract month and year from a zoo::yearmon object

require(zoo) 
dat.int$yearmon <- as.yearmon(dat.int$date, "%b %y") 

2) Во-вторых, вам нужно сделать резюмировать операцию (рекомендуется использовать plyr или более новую dplyr) на rain>=1.0 агрегируются по yearmon. Назовите наш итоговый столбец rainy_days.

Если вы хотите сохранить rainy_days столбец обратно в dat.int dataframe, вы используете transform вместо summarize:

ddply(dat.int, .(yearmon), transform, rainy_days=sum(rain >= 1.0)) 

или иначе, если вы на самом деле просто хочу новую сводную dataframe:

require(plyr) 
rainydays_by_yearmon <- ddply(dat.int, .(yearmon), summarize, rainy_days=sum(rain >= 1.0)) 
print.data.frame(rainydays_by_yearmon) 

    yearmon rainy_days 
1 Jan 1975   14 
2 Feb 1975   12 
3 Mar 1975   13 
4 Apr 1975   6 
5 May 1975   6 
6 Jun 1975   5 
... 
355 Jul 2004   3 
356 Aug 2004   7 
357 Oct 2004   14 
358 Nov 2004   16 
359 Dec 2004   19 

Примечание: вы можете сделать это с помощью простого старого R, не используя zoo или plyr/dplyr. Но может также научить вас более приятным, более масштабируемым, поддерживаемым идиомам кода.

+0

Привет, у меня есть другой вопрос об этом наборе данных. Я пытаюсь подмножить данные по месяцам (например, я хочу, чтобы все Ян и его raindays вместе) Я пробовал эти месяцы <- подмножество (rainydays_by_yearmon, month == 1), но не работает .. Что я делаю не так? – Lam

+0

Как и во всех «джиннарах» за все годы? Тогда вам понадобится столбец «месяц»; прочитайте пакеты 'Date, zoo' и SO, чтобы получить месяц от вашего объекта Date. – smci

+0

Вам нужно создать новый столбец «месяц». – smci

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

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