如何添加缺少的日期,并删除每小时时间序列重复日期。 对应的日期与NA降雨缺少日期填写。
这个例子的时间序列似
date Rainfall(mm)
1970-01-05 00:00:00 1.0
1970-01-05 01:00:00 1.0
1970-01-05 05:00:00 3.6
1970-01-05 06:00:00 3.6
1970-01-05 07:00:00 2.2
1970-01-05 08:00:00 2.2
1970-01-05 09:00:00 2.2
1970-01-05 10:00:00 2.2
1970-01-05 11:00:00 2.2
1970-01-05 13:00:00 2.2
1970-01-05 13:00:00 2.2
1970-01-05 13:00:00 2.2
您可以使用组合seq.POSIXt
创建data.frame
,无失的时间步长(对象grid.
),然后使用merge
与观测相结合df
在我的例子。
这应该解决您的问题
# Create a sample data.frame missing every second observation.
df <- data.frame(date=seq.POSIXt(from=as.POSIXct("1970-01-01 00:00:00"), to=as.POSIXct("1970-01-01 10:00:00"), by="2 hours"), rainfall=rnorm(6))
#Create a seq of times without anything missing
grid. <- data.frame(date=seq.POSIXt(as.POSIXct("1970-01-01 00:00:00"), to=as.POSIXct("1970-01-01 10:00:00"), by="1 hours"))
# Merge them together keeping all the values from grid.
dat. <- merge(grid., df, by="date", all.x=TRUE)
要删除重复值,你可以找他们,并使用删除duplicated
功能。
# The ! means the reverse logic. Therefore TRUE becomes FALSE.
dup_index <- !duplicated(dat.[,1])
# Now re-create the dat. object with only non-duplicated rows.
dat. <- dat.[dup_index,]
另一种方式来做到这一点是使用aggregate
功能。 如果您有重复这真的是两种不同的意见,所以你要了两下,使用的意思是,这可能是有用的;
dat. <- aggregate(dat.[,2], by=list(dat[,1]), FUN=mean)
HTH
在该FAQ#13 动物园常见问题小品地址填写左右的时间序列的部分。 该aggregate
在争论read.zoo
处理重复。 在这种情况下,我们取它们的平均值,但我们可以采取其它动作,诸如使用FUN = function(x) tail(x, 1)
我们使用chron的日期/时间在这里为了避免时区的问题(见[R新闻4/1 ),但我们也可以使用POSIXct如果时区是相关的-他们似乎并不因为它们不是输入。
Lines <- "date Rainfall(mm)
1970-01-05 00:00:00 1.0
1970-01-05 01:00:00 1.0
1970-01-05 05:00:00 3.6
1970-01-05 06:00:00 3.6
1970-01-05 07:00:00 2.2
1970-01-05 08:00:00 2.2
1970-01-05 09:00:00 2.2
1970-01-05 10:00:00 2.2
1970-01-05 11:00:00 2.2
1970-01-05 13:00:00 2.2
1970-01-05 13:00:00 2.2
1970-01-05 13:00:00 2.2"
library(zoo)
library(chron)
asChron <- function(d, t) as.chron(paste(d, t))
z <- read.zoo(text = Lines, skip = 1, index = 1:2, FUN = asChron, agg = mean)
merge(z, zoo(, seq(start(z), end(z), 1/24))) # as in FAQ
如果数据来自文件替换text = Lines
的东西,如file = "myfile.dat"
。