2016-08-28 4 views
1

Я пытаюсь aggreagate данные по 5 минут с помощью средств XTS:R: агрегирование данных временных рядов возвращает 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) 

Проблема заключается в том, если распечатка «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

Кто-нибудь знает, что я делаю неправильно?

ответ

1

Проблема заключалась в том, что вы ставили X как аргумент для агрегирования, а не для числового поля (например, или T2).

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 и заполнить его «1» для каждого входа, а затем добавить их на каждые 5-минутный интервал? – user3256536

+0

@ user3256536 Вы очень желанны. Тики? Вы имеете в виду сюжет? Я считаю, что вам просто нужно использовать опцию «breaks» для установки меток. –

+0

Проблема с использованием 'cut' и' breaks' заключается в том, что вы можете устанавливать разрывы только на заданное значение, например часы или минуты, вы не можете установить его на 5 минут. Неплохо, да, вы можете ... DataTable <- table (cut (data, breaks = "5 mins")) 'является решением. – user3256536

0

Проблема заключается в том, что ваш объект xts не имеет данных, потому что вы создали его только раз. Ваш первый блок кода эквивалентна:

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

period.apply Ваш вызов работает просто отлично, если вы создаете объект XTS с данными.

X <- as.xts(read.zoo("C:/Users/User/Documents/data.csv", sep=",", header=TRUE)) 
DataTable <- period.apply(X, endpoints(X, "minutes", 5), mean) 
Смежные вопросы