r - 将时间序列中的分类列扩展为多个每秒计数列

标签 r time-series

进行以下转换的最佳方法是什么?这种转换有两个部分。第一个是将速度转换为每秒平均值。第二种是将分类列转换为多列——每个分类值一列,其中值是每秒出现的次数。例如:

输入(xts A):

Time(PosixCT), Observed Letter, Speed
2011/01/11 12:12:01.100,A,1
2011/01/11 12:12:01.200,A,2
2011/01/11 12:12:01.400,B,3
2011/01/11 12:12:01.800,C,4
2011/01/11 12:12:02.200,D,2
2011/01/11 12:12:02.200,A,7

输出:(xts B)
Time, A_Per_Second, B_Per_Second, C_Per_Second, D_Per_Second, Aggregate_Speed
2011/01/11 12:12:01,2,1,1,0,2.5
2011/01/11 12:12:02,1,0,0,1,4.5

我希望以不需要知道所有类别的方式来执行此操作。基本上,我试图在不丢失任何分类数据的情况下将时间折叠到每秒,并将数字数据汇总为每秒平均值。

最佳答案

我不经常使用时间序列格式的数据(即 xts ),所以我提供了一个使用 data.frame 中的数据的解决方案格式。

(另请注意,我已将此数据框的列名称更改为单个单词以使其更易于使用。我在此问题的末尾发布了我的数据框的结构。)

我使用两个包:

  • HMisctrunc POSIXt 类的方法
  • plyr使用一些魔法来拆分、应用和组合数据

  • 编码:
    A <- as.data.frame(A)
    
    library(Hmisc)
    A$Date <- trunc(A$Date, units="secs")
    A
    
    library(plyr)
    ddply(A, .(Date, Observed), summarise, Speed=mean(Speed))
    

    结果与您指定的格式略有不同,但应该很容易将其改造成您要求的宽格式。
                     Date Observed Speed
    1 2011-01-11 12:12:01        A   1.5
    2 2011-01-11 12:12:01        B   3.0
    3 2011-01-11 12:12:01        C   4.0
    4 2011-01-11 12:12:02        A   7.0
    5 2011-01-11 12:12:02        D   2.0
    

    这是dput A的结果:
    A <- structure(list(Date = structure(list(sec = c(1, 1, 1, 1, 2, 2
    ), min = c(12L, 12L, 12L, 12L, 12L, 12L), hour = c(12L, 12L, 
    12L, 12L, 12L, 12L), mday = c(11L, 11L, 11L, 11L, 11L, 11L), 
        mon = c(0L, 0L, 0L, 0L, 0L, 0L), year = c(111L, 111L, 111L, 
        111L, 111L, 111L), wday = c(2L, 2L, 2L, 2L, 2L, 2L), yday = c(10L, 
        10L, 10L, 10L, 10L, 10L), isdst = c(0L, 0L, 0L, 0L, 0L, 0L
        )), .Names = c("sec", "min", "hour", "mday", "mon", "year", 
    "wday", "yday", "isdst"), class = c("POSIXlt", "POSIXt"), tzone = c("", 
    "GMT", "BST")), Observed = structure(c(1L, 1L, 2L, 3L, 4L, 1L
    ), .Label = c("A", "B", "C", "D"), class = "factor"), Speed = c(1L, 
    2L, 3L, 4L, 2L, 7L)), .Names = c("Date", "Observed", "Speed"), row.names = c(NA, 
    -6L), class = "data.frame")
    

    关于r - 将时间序列中的分类列扩展为多个每秒计数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6790695/

    相关文章:

    rugarch 不会加载,但可以安装得很好(在 mac 上)

    python - 根据日期时间值是否在一小时内在 Pandas 中创建新列

    c# - 从多变量时间序列间隔中检测罕见事件

    R 没有工作区但分配了 2+GB 的内存?

    r - 将SNP ID映射到基因组坐标

    sql - 大整数系列的优化存储

    python - 使用 "bin size"/"frequency"对 Pandas 数据帧重新采样

    r - 如何在预测后保留 xts 时间序列数据中的日期

    r - 为什么我的 ggplot 对象变得这么大?

    r - 如何强制 ggplot 的 geom_tile 填充每个方面?