【问题标题】:How can I plot subsets of temporal data?如何绘制时间数据的子集?
【发布时间】:2011-07-07 00:43:36
【问题描述】:

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

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

【问题讨论】:

  • 我改写了你的问题的标题,以缩小你问的确切范围。该网站还可以作为搜索参考,因此清晰的标题可以帮助人们找到他们正在寻找的内容。

标签: r plot subset temporal


【解决方案1】:

将日期转换为适当的 DateTimeClass(POSIXct 或日期),然后使用可用的工具。

 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 2019-07-31
      • 1970-01-01
      • 2014-03-11
      • 2019-03-13
      • 2018-01-23
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多