R按日期范围进行子集化

时间:2013-11-13 14:58:42

标签: r date range subset

看起来很简单,我已经完成了所有类似的问题并将它们全部应用了......我要么一无所获,要么就是......

尝试从水温(WTEMP)获取特定日期范围(SAMPLE_DATE)2007-06-01至2007-09-30来自(allconmon)

这是我到目前为止的代码......

bydate<-subset(allconmon, allconmon$SAMPLE_DATE > as.Date("2007-06-01") & allconmon$SAMPLE_DATE < as.Date("2007-09-30"))

我也试过这个但是得到了错误

bydate2<- as.xts(allconmon$WTEMP,order.by=allconmon$SAMPLE_DATE)

 bydate2['2007-06-01/2007-09-30']

Error in xts(x, order.by = order.by, frequency = frequency, .CLASS = "double",  : 
  order.by requires an appropriate time-based object

不确定我在这里做错了什么......似乎适合其他人

2 个答案:

答案 0 :(得分:0)

我强烈建议您在处理时间序列数据时使用R中的zoo包。

您提到的操作实际上是window中的zoo函数。 以下是?window的示例:

Examples

window(presidents, 1960, c(1969,4)) # values in the 1960's
window(presidents, deltat = 1)  # All Qtr1s
window(presidents, start = c(1945,3), deltat = 1)  # All Qtr3s
window(presidents, 1944, c(1979,2), extend = TRUE)

pres <- window(presidents, 1945, c(1949,4)) # values in the 1940's
window(pres, 1945.25, 1945.50) <- c(60, 70)
window(pres, 1944, 1944.75) <- 0 # will generate a warning
window(pres, c(1945,4), c(1949,4), frequency = 1) <- 85:89
pres

来自JSS的a list of papers演示了zoo包的使用,也重塑了我发现非常鼓舞人心的数据。

答案 1 :(得分:0)

我明白了!在多个级别上......首先,当我从文本文件上传时,我没有注意到R用我的样本日期标签做了一些时髦的东西...可能是我的错...

这是数据集的一小部分样本。其对5个变量的5,573,301次观测

注意样品日期前面的时髦符号....不确定为什么R做到了......

 ï..SAMPLE_DATE SampleTime STATION SONDE Layer TOTAL_DEPTH TOTAL_DEPTH_A BATT BATT_A     WTEMP WTEMP_A SPCOND SPCOND_A SALINITY SALINITY_A DO_SAT DO_SAT_A

但是我做了什么....(我将名称更改为x,因为allconmon有点过分)

x <- read.csv(file = "C:/Users/Desktop/cmon2001-08.txt",quote = "",header = TRUE,sep = "\t", na.strings = c("","NULL"))

library(chron)

x$month <- months(as.Date(x$ï..SAMPLE_DATE, "%Y-%m-%d"))

x$year <- substr(as.character(x$ï..SAMPLE_DATE), 1, 4)

 y <- x[x$month == 'June' | x$month == 'July' | x$month == 'August' | x$month == 'September' ,]

所以现在我能够将我的所有数据按4个月,然后按年,站和水温进行分组....