2016-08-28 54 views
1

我試圖通過5分鐘手段aggreagate數據:R:彙總的時間序列數據進行了XTS返回NA

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) 

的問題是,如果打印出「數據表」,它表明聚集沒沒有工作,聚合分數是空的(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

任何人知道我在做什麼錯?

回答

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)) 
+0

非常感謝。我還有一個問題可以幫助我?我會如何彙總5分鐘的時間間隔,我是否需要在CSV文件中添加另一列,併爲每個entery填充「1」,然後每隔5分鐘添加一次? – user3256536

+0

@ user3256536非常歡迎。蜱?你的意思是在一個情節?我相信你只需要使用'breaks'選項來設置刻度線。 –

+0

使用'cut'和'breaks'的問題是您只能將休息時間設置爲預定值,例如幾小時或幾分鐘,您無法將其設置爲5分鐘。 我的不好,是的,你可以...'DataTable < - 表(切(數據,休息=「5分鐘」))'是解決方案。 – user3256536

0

問題是您的xts對象沒有任何數據,因爲您只用次創建它。你的代碼第一塊相當於:如果您創建一個數據對象XTS

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

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)