【问题标题】:Aggregating By Time按时间聚合
【发布时间】:2011-09-11 17:54:11
【问题描述】:

我想对作为字符串读入的时间列进行聚合,然后对输出进行子集化,但我无法将输出 tmp$Time 转换为时间值。

数据是通过读取 csv 文件创建的。

> head(Data)
                 Time  F   Z
1 2011-09-09-06.54.00  1 489
2 2011-09-09-06.54.00  3 678
3 2011-09-09-06.54.00  6 890
4 2011-09-09-07.54.00  8 345
5 2011-09-09-07.54.00 10 567

> strptime(Data$Time, format="%Y-%m-%d-%H.%M.%S" )
[1] "2011-09-09 06:54:00" "2011-09-09 06:54:00"
[3] "2011-09-09 06:54:00" "2011-09-09 07:54:00"
[5] "2011-09-09 07:54:00"

> tmp <- aggregate(Data$Z ~ Data$Time,Data, sum)

> head(tmp)
            Data$Time Data$Z
1 2011-09-09-06.54.00   2057
2 2011-09-09-07.54.00    912

> strptime(tmp[1], format="%Y-%m-%d-%H.%M.%S" )
Data$Time 
       NA 

我在转换之前对 Time 值使用聚合,因为当它是一个时间时,我无法让它对 Time 起作用。

【问题讨论】:

    标签: r time aggregate


    【解决方案1】:

    这似乎有效

    Data <- data.frame(Time = c("2011-09-09 06:54:00", "2011-09-09 06:54:00",
                                "2011-09-09 06:54:00", "2011-09-09 07:54:00",
                                "2011-09-09 07:54:00"),
                       F = c(1, 3, 6, 8, 10),
                       Z = c(489, 678, 890, 345, 567)   )
    tmp <- aggregate(Data$Z ~ Data$Time,Data, sum)
    
    strptime(tmp[,1], format="%Y-%m-%d %H:%M:%S" )
    

    生产

    [1] "2011-09-09 06:54:00" "2011-09-09 07:54:00"
    

    我对你的最后一行做了两处修改:

    • tmp[,1] 而不是 tmp[1]
    • format="%Y-%m-%d %H:%M:%S" 而不是 format="%Y-%m-%d-%H.%M.%S"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      相关资源
      最近更新 更多