Как добавить новый столбец и статистические значения в R - PullRequest
1 голос
/ 17 февраля 2011

Я совершенно новичок в 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 Ответ

5 голосов
/ 17 февраля 2011

Общее решение с 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)
...