【问题标题】:How to add a new column and aggregate values in R如何在 R 中添加新列和聚合值
【发布时间】:2011-06-28 23:42:36
【问题描述】:

我对 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 的线图。

【问题讨论】:

    标签: r plot aggregation data-analysis


    【解决方案1】:

    使用 gsub 的一般解决方案:

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

    编辑:

    您可以使用Data$Hour &lt;- substr(Data$Hour,1,2) 来获取小时。正如 cmets 中所说,如果您在 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)
    

    【讨论】:

    • 谢谢不知道gsub,看起来很方便。一个小查询我得到了像 0000, 0100, ...2300 小时这样的字符串,如何只写前两位数字,比如 00, 01, ...10, ..22, 23。另外,我该怎么做聚合 Prop1 和 Prop2 wrt 小时,因为我想要一个线图,两者都在同一个图中。我是 R 新手,所以请原谅这些非常简单的问题 :)。
    • 由于Datetime 列的结构看起来很稳定,您可以使用substr 来获取小时:substr(Datetime,10,13)
    • @James 我发布了一个新问题,该问题超出了此范围,其中有一个类别列。你们也能帮我解决这个问题吗? stackoverflow.com/questions/5030389/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2019-12-24
    • 2021-07-30
    • 2021-12-07
    相关资源
    最近更新 更多