2011-03-02 53 views
3

我有输入数据和它的子集,以便只查看名为CODE的列中输入为4或5的行。接下来,我将这些数据进行了子集化处理,以便能够查看特定物种。然后,我确保DATE列中的条目被读取为日期,而不是一个因子(这是默认值)。然后,我画出二者对立起来列:1992年如何绘制时态数据的子集?

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) 

的数据去直到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) 

任何想法一次只能绘制一年,或者如何制作每年的子集?

+0

我改写你的问题的标题,以缩小你问的问题。这个网站也可以作为搜索参考,所以明确的标题可以帮助人们找到他们想要的东西。 – 2011-03-02 10:35:14

回答

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)) 

有很多的选择,一旦数据是一个很好的日期时间格式,包括字符表示的子集,如format(DACEXC$DATE, "%Y") == "1993"

查看?strptime查看格式的详细信息,查看?DateTimeClasses查看大图。

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

+1

+1很好的说明答案@Joris – 2011-03-02 12:47:58