如何绘制时态数据的子集?

时间:2011-03-02 05:26:34

标签: r plot subset temporal

我有输入数据,并对其进行子集化,以便在名为CODE的列中仅查看条目为4或5的行。接下来,我对这些数据进行了子集化,以便能够查看特定的物种。然后,我确保将DATE列中的条目读作日期,而不是因子(这是默认值)。然后,我将两个列相互映射:

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 个答案:

答案 0 :(得分:4)

将日期转换为正确的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查看大图。

答案 1 :(得分:3)

确保您的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