r - 在非连续时间序列中找到某个时间范围内的最大值

标签 r dataframe time-series max

我有一个时间序列如下所示的数据框:

df<-structure(list(date = structure(c(-6905, -6891, -6853, -6588, 
-6588, -6586, -6523, -6515, -5856, -5753), class = "Date"), flow = c(2.22, 
2.56, 3.3, 1.38, 4, 1.4, 1.32, 1.26, 6, 35.69)), .Names = c("date", 
"flow"), row.names = c(NA, 10L), class = "data.frame")

我想在其日期前后 2 天内删除所有不是最大值的行。所以在上面的例子中,第 4 行和第 6 行将被删除。我找不到类似的已回答问题。

我编写的这段代码不起作用,它又丑又长,而且没有处理数据框的边缘:

  idx <- c()
  for (j in 3:(length(df$date)-2)){
    if (as.Date(df$date[j+2])-as.Date(df$date[j])<3 |
        as.Date(df$date[j])-as.Date(df$date[j-2])<3){
      if (df$flow[j]!=max(df$flow[(j-2):(j+2)])){
        idx <- c(idx,j)
      }
    } else if (as.Date(df$date[j+1])-as.Date(df$date[j])<3 |
               as.Date(df$date[j])-as.Date(df$date[j-1])<3){
      if (df$flow[j]!=max(df$flow[(j-1):(j+1)])){
        idx <- c(idx,j)
      }
    }
  }

请注意,数据框中的日期不连续。

最佳答案

使用 zoo 库。

library(zoo)

# convert into a zoo time series
dtf.zoo <- zoo(dt$flow, order.by=dt$date)

# remove duplicate dates by keeping the maximum value
dtf.zoo <- aggregate(dtf.zoo, time(dtf.zoo), max)

# pad with NAs to make the time series regular
dtf.zoo <- merge(
  dtf.zoo, 
  zoo(, seq(min(index(dtf.zoo)), max(index(dtf.zoo)), "day"))
)

# find rows that are less than a value two days prior or hence
rem <- which(dtf.zoo < rollapply(dtf.zoo, 5, max, na.rm=TRUE, partial=TRUE))

# remove those rows
dtf.zoo2 <- dtf.zoo[-rem]

# remove NAs
dt2 <- data.frame(flow=na.omit(dtf.zoo2))
dt2
#             flow
# 1951-02-05  2.22
# 1951-02-19  2.56
# 1951-03-29  3.30
# 1951-12-19  4.00
# 1952-02-22  1.32
# 1952-03-01  1.26
# 1953-12-20  6.00
# 1954-04-02 35.69

which(!(dt$flow %in% dt2$flow))
# 4 6

关于r - 在非连续时间序列中找到某个时间范围内的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53295976/

相关文章:

r - 为什么这个 xts 频率总是 1?

r - 具有列之间所有成对相互作用的模型矩阵

r - 绘制 XTS 对象时的变化

R:使用索引向量中的值将列添加到数据框,包括 NA

python - 转置 Pandas DataFrame 中的列子集,同时使用其他列作为分组变量?

python - iloc方法返回不同类型的数据

r - 将毫秒时间戳解析为 R 中的时间

r - 用圆形图案填充矩阵

r - 通过 tinytex 成功安装 TinyTeX 后无法编译 test.tex

python - Python 中 OLS 的 Newey-West 标准错误?