Как я могу построить подмножества временных данных? - PullRequest
3 голосов
/ 02 марта 2011

У меня есть входные данные, и я делю их на подмножество, чтобы просматривать только строки с записями 4 или 5 в столбце с именем CODE. Далее я поднастроил эти данные, чтобы иметь возможность посмотреть на конкретный вид. Затем я убедился, что записи в столбце ДАТА читаются как дата, а не как фактор (который был по умолчанию). Затем я строю два столбца друг против друга:

ph<-read.csv(url("http://luq.lternet.edu/data/lterdb88/data/Lfdp1-ElVerdePhenology.txt"))
ftsd<-subset(ph, ph$CODE %in% c("4","5"))
DACEXC<-subset(ftsd, ftsd$SPECIES %in% "DACEXC")
DACEXC$DATE<-as.Date(DACEXC$DATE, format="%m/%d/%y")
plot(DACEXC$DATE,DACEXC$NUMBER)

Данные идут с 1992 по 2007 год, и я хотел бы строить графики по одному году за раз. Я буду делать это для целого ряда видов, но я не могу понять, как это сделать. Я перепробовал целый ряд вещей, в том числе ограничение оси X или попытки создать подмножество всего за один год, но не понял этого. Я пробовал некоторые из следующих идей:

plot(DACEXC$DATE,DACEXC$NUMBER, xlim=c(1992,1993))
plot(DACEXC$DATE,DACEXC$NUMBER, xlim=c(01/01/1992,12/31/1992))
plot(DACEXC$DATE,DACEXC$NUMBER, xlim=c(1992:1993))

DACEXC92<-subset(DACEXC92, DATE==1992)
DACEXC92
[1] DATE    BASKET  SPECIES CODE    NUMBER 
<0 rows> (or 0-length row.names)

Выше приведен пустой фрейм данных, как и ниже, и ни одна из моих попыток выдвижения условных аргументов не увенчалась успехом.

DACEXC92<-subset(DACEXC92, DATE==04/01/92)
DACEXC92
[1] DATE    BASKET  SPECIES CODE    NUMBER 
<0 rows> (or 0-length row.names)

Есть какие-нибудь идеи о том, как строить только один год за раз, или как составлять подмножество каждого года?

Ответы [ 2 ]

4 голосов
/ 02 марта 2011

Преобразуйте дату в правильный DateTimeClass (POSIXct или Date), а затем используйте доступные для этого инструменты.

 DACEXC$DATE <- as.POSIXct(strptime(DACEXC$DATE, "%Y-%m-%d"))

(as.Date(DACEXC$DATE) или as.POSIXct(DACEXC$DATE), вероятно, можно использовать, но мне нравится делать это явно, так как легче понять, что не так, когда используется другой формат).

Извлечение компонента года из представления POSIXlt и приравнивание к определенному году:

 with(DACEXC[as.POSIXlt(DACEXC$DATE)$year + 1900 == 1993, ], plot(DATE, NUMBER))

Или в диапазоне лет:

with(DACEXC[as.POSIXlt(DACEXC$DATE)$year + 1900 %in% 1993:1995, ], 
     plot(DATE, NUMBER))

Существует множество параметров, если данные представлены в хорошем формате DateTime, включая подмножество символьных представлений, таких как format(DACEXC$DATE, "%Y") == "1993".

См. ?strptime для подробной информации о формате и ?DateTimeClasses для общей картины.

3 голосов
/ 02 марта 2011

Убедитесь, что ваши значения xlim являются датами:

with(DACEXC,
  plot(DATE,NUMBER, 
     xlim=as.Date(c("1992-01-01","1992-12-31"))
  )
)

, что дает:

enter image description here

Обратите внимание, что это только меняет xlim, поэтому данные за следующий год все еще видны. Если вы хотите работать с годами, то вы также можете использовать пакет chron:

library(chron)
DACEXC92 <- DACEXC[years(DACEXC$DATE)==1992,]
with(DACEXC92,plot(DATE,NUMBER))

, который дает вам желаемый фрейм данных и:

enter image description here

...