Как добавить новый столбец и статистические значения в R

Я совершенно новичок в gnuplot и пытаюсь сделать это только потому, что мне нужно научиться этому. У меня есть значения в трех столбцах, где первый представляет имя файла (дата и время, интервал в один час), а оставшиеся два столбца представляют две разные сущности Prop1 и Prop2.

Datetime             Prop1        Prop2

20110101_0000.txt     2            5
20110101_0100.txt     2            5
20110101_0200.txt     2            5
...
20110101_2300.txt     2            5
20110201_0000.txt     2            5
20110101_0100.txt     2            5
...
20110201_2300.txt     2            5
...

Мне нужно агрегировать данные по часу дня (**_0100), который является последними четырьмя цифрами. Итак, я хочу создать еще один столбец под названием час, который сообщает мне время суток. Это значит 0000 = 0h, 0100 = 1h, ...... 2200 = 22h и т.п.

Затем я хочу получить сумму Prop1 и Prop2 за каждый час, так что в итоге получится что-то вроде.

Hour  Prop1   Prop2
0h     120     104
1h     230     160
...
10h    90      110
...
23h    100    200 

и получить линейный график Prop1 и Prop2.

1 ответ

Решение

Общее решение с gsub:

Data$Hour <- gsub(".+_(\\d+).txt","\\1",Data$Datetime)

РЕДАКТИРОВАТЬ:

Ты можешь использовать Data$Hour <- substr(Data$Hour,1,2) чтобы получить только час. Как сказано в комментариях, если у вас всегда одинаковая структура в Datetime, вы можете использовать substr() немедленно:

Data$Hour <- substr(Data$Datetime,10,11)

Тогда вы можете использовать aggregate, tapply, by... что бы ты ни делал, что хочешь. Для суммирования как Prop1, так и Prop2 вы можете использовать агрегат, например:

aggregate(Data[2:3],list(Data$Hour),sum)

с набором данных:

zz<-textConnection("Datetime             Prop1        Prop2
20110101_0000.txt     2            5
20110101_0100.txt     2            5
20110101_0200.txt     2            5
20110101_2300.txt     2            5
20110201_0000.txt     2            5
20110201_0100.txt     2            5
20110201_0200.txt     2            5
20110201_2300.txt     2            5")
Data <- read.table(zz,header=T,as.is=T)
Другие вопросы по тегам