簡體   English   中英

如何繪制時態數據的子集?

[英]How can I plot subsets of temporal data?

我有輸入數據,並對其進行子集化,以便在名為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)

如何一次只繪制一年,或者如何制作每年的子集?

將日期轉換為正確的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 ;有關大圖的信息,請參閱?strptime ?DateTimeClasses

確保您的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))

它為您提供所需的數據框架:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM