如何添加缺少的日期,并删除每小时时间序列重复日期(how to add a missing date

2019-09-20 00:43发布

如何添加缺少的日期,并删除每小时时间序列重复日期。 对应的日期与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

Answer 1:

您可以使用组合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



Answer 2:

在该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"



文章来源: how to add a missing dates and remove repeated dates in hourly time series
标签: r time-series