如何在R中添加新列和聚合值

时间:2011-02-17 10:05:39

标签: r plot aggregation data-analysis

我对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)聚合数据,这是最后四位数字。所以,我想创建另一个名为hour的列,它告诉我当天的小时。这意味着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 个答案:

答案 0 :(得分:5)

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)

然后,您可以使用aggregatetapplyby,......无论您想做什么。要将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)