【问题标题】:R: Aggregating time series data returns NAR:聚合时间序列数据返回 NA
【发布时间】:2016-08-28 11:50:33
【问题描述】:

我正在尝试使用 xts 以 5 分钟为单位聚合数据:

library(xts)
data <- read.csv("C:/Users/User/Documents/data.csv")
times <- data$Time
X <- as.POSIXct(times)
X <- as.xts(X)
DataTable <- period.apply(X, endpoints(X, "minutes", 5), mean)

问题是,如果打印出“DataTable”,说明聚合不成功,聚合分数为空(NA)。

2016-08-28 21:26:32   NA
2016-08-28 21:29:05   NA
2016-08-28 21:30:57   NA
2016-08-28 21:34:31   NA
2016-08-28 21:35:22   NA
2016-08-28 21:37:31   NA
2016-08-28 21:40:15   NA
2016-08-28 21:43:59   NA
2016-08-28 21:48:01   NA
2016-08-28 21:48:58   NA
2016-08-28 21:49:14   NA
2016-08-28 22:40:45   NA
2016-08-28 23:40:45   NA

这里是输入文件:https://www.dropbox.com/s/epkbk770ajksqnb/data.csv?dl=0

有人知道我做错了什么吗?

【问题讨论】:

    标签: r xts


    【解决方案1】:

    问题在于您将X 作为聚合参数而不是数字字段(例如T1T2)。

       library(xts)
        mydata    <- read.csv("data.csv")
        times     <- mydata$Time
        X         <- as.POSIXct(times)
        X         <- as.xts(X)
        period.apply(mydata$T1, INDEX = endpoints(X, "minutes", 5), function(x) mean(x, na.rm=T))
    

    【讨论】:

    • 非常感谢。我还有一个问题可以帮助我吗?我将如何以 5 分钟的间隔聚合刻度,我是否需要在我的 CSV 文件中添加另一列并为每个输入填充“1”,然后每隔 5 分钟将它们相加?
    • @user3256536 不客气。蜱虫?你是说在情节中?我相信您只需要使用breaks 选项来设置刻度线。
    • 使用cutbreaks 的问题是您只能将休息时间设置为预定值,例如小时或分钟,而不能将其设置为5分钟。我的错,是的,你可以...DataTable &lt;- table(cut(data, breaks="5 mins")) 是解决方案。
    【解决方案2】:

    问题在于您的 xts 对象没有任何数据,因为您只使用时间创建了它。您的第一段代码相当于:

    library(xts)
    data <- read.csv("C:/Users/User/Documents/data.csv")
    X <- as.xts(as.POSIXct(data$Time))
    

    如果您使用数据创建 xts 对象,您的 period.apply 调用就可以正常工作。

    X <- as.xts(read.zoo("C:/Users/User/Documents/data.csv", sep=",", header=TRUE))
    DataTable <- period.apply(X, endpoints(X, "minutes", 5), mean)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-10
      • 2019-09-30
      • 1970-01-01
      • 2013-03-30
      • 2021-01-26
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      相关资源
      最近更新 更多