2011-09-26 6 views
3

Я пытаюсь построить данные с помощью R, читая мой файл CSV, который содержит некоторые значения, которые регистрировались в секунду. Я хотел бы, чтобы R объединил данные в минуту, чтобы я мог строить данные за минуту, используя plot(TIME,VALUE.). В моем файле CSV есть что-то вроде этого;Агрегирование данных с использованием R

Store No.,Date,Time,Watt 
33,2011/09/26,09:11:01,0.0599E+03 
34,2011/09/26,09:11:02,0.0597E+03 
35,2011/09/26,09:11:03,0.0598E+03 
36,2011/09/26,09:11:04,0.0596E+03 
37,2011/09/26,09:11:05,0.0593E+03 
38,2011/09/26,09:11:06,0.0595E+03 
39,2011/09/26,09:11:07,0.0595E+03 
40,2011/09/26,09:11:08,0.0595E+03 
41,2011/09/26,09:11:09,0.0591E+03 

У меня возникли проблемы агрегирование времени и столбец Watt на поминутной основе, как я новичок в R. Любая помощь будет высоко оценен.

+5

Поиск r-help и/или StackOverflow для ответов, связанных с пакетом и агрегацией зоопарка. Это было рассмотрено сто раз. Или просто установите зоопарк и прочитайте его четыре виньетки, возможно, начиная с обновленной версии опубликованной статьи. –

+0

На самом деле я попытался найти StackOverflow, но не смог найти аналогичный вопрос, обращаясь к столбцу времени w.r.t. второй столбец. :( –

ответ

5

Предполагая, что магазин номер не имеет значения, и изменять последние три строки в данном примере данных, представленных в этом вопросе, чтобы быть 09:12:.., а не 09:11:.. таким образом, мы по крайней мере, две разные минуты:

# create test data 

Lines <- "Store No.,Date,Time,Watt 
33,2011/09/26,09:11:01,0.0599E+03 
34,2011/09/26,09:11:02,0.0597E+03 
35,2011/09/26,09:11:03,0.0598E+03 
36,2011/09/26,09:11:04,0.0596E+03 
37,2011/09/26,09:11:05,0.0593E+03 
38,2011/09/26,09:11:06,0.0595E+03 
39,2011/09/26,09:12:07,0.0595E+03 
40,2011/09/26,09:12:08,0.0595E+03 
41,2011/09/26,09:12:09,0.0591E+03" 
cat(Lines, "\n", file = "data.txt") 

# read in aggregating at the same time 

library(zoo) 
library(chron) 
z <- read.zoo("data.txt", header = TRUE, sep = ",", index = 2:3, 
    FUN = paste, FUN2 = function(x) trunc(as.chron(x), "00:01:00"), 
    aggregate = mean)[, -1] 

Здесь FUN применяется к столбцам, указанным index. Он вставляет их вместе, а затем FUN2 применяется к результату FUN, создавая дату/время chron. Наконец строки с одинаковыми значениями FUN2 затем агрегируются принимая среднее Watt подачи:

> z 
(09/26/11 09:11:00) (09/26/11 09:12:00) 
      59.63333   59.36667 

В зависимости от того, что хотел aggregate аргумент может быть изменен на aggregate = function(x) tail(x, 1) вместо aggregate аргумента показано.

Для получения дополнительной информации и примеров загрузите пакет зоопарка и посмотрите в ?read.zoo, ?aggregate.zoo и vignette("zoo-read"), а также другие виньетки и файлы справки.

ОБНОВЛЕНИЕ: Небольшое упрощение с использованием аргумента FUN2. Не уверен, но read.zoo аргумент , возможно, не существовал в момент ответа на этот вопрос.

+0

Спасибо большое !!! u сделал мой день! :) работает как шарм! –

Смежные вопросы