3

我有输入数据,并将其子集化,以便仅查看名为 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)

关于如何一次只绘制一年或如何制作每年的子集的任何想法?

4

2 回答 2

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大图。

于 2011-03-02T05:52:49.200 回答
3

确保您的 xlim 值是日期:

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

这使:

在此处输入图像描述

请注意,这只会更改 xlim,因此下一年的数据仍然可见。如果你想和这些年一起工作,那么你也可以使用这个包chron

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

这为您提供了所需的数据框和:

在此处输入图像描述

于 2011-03-02T10:27:02.213 回答