【问题标题】:How to insert zeros in a data frame of R如何在R的数据框中插入零
【发布时间】:2014-05-01 09:59:27
【问题描述】:

我有以下 data.frame,DF DF 已经在 R 中了。我们不需要使用 read.csv 或其他东西在 r 中加载它

时间戳计数 1 2014-01-15 14:30:00 2 2 2014-01-15 16:30:00 3 3 2014-01-15 17:00:00 2 4 2014-01-15 17:15:00 1

我有一个“独立的时间戳序列”,比如从2014-01-15 14:00:002014-01-22 13:00:00tmpSeq。我想从此 data.frame 中获取计数的 List 并为 timeStamp 插入零,该零不存在于 data.frame 但在 tmpSeq

【问题讨论】:

  • 您应该提供一个可重现的示例,并展示您迄今为止尝试过的内容。
  • 谢谢大家。合并功能确实有帮助。

标签: r datetime dataframe


【解决方案1】:

假设您的序列以 15 分钟为增量:

DF <- data.frame(timeStamp=as.POSIXct(c("2014-01-15 14:30:00","2014-01-15 16:30:00",
                                        "2014-01-15 17:00:00","2014-01-15 17:15:00")),
                 count=c(2,3,2,1))


tmpSeq <- seq(as.POSIXct("2014-01-15 14:00:00"),
              as.POSIXct("2014-01-22 13:00:00"), by="15 mins")

DF <- merge(DF, data.frame(timeStamp=tmpSeq, count=0), all=TRUE)

应该这样做。

【讨论】:

    【解决方案2】:

    通常,在处理时间序列对象时,最好使用一些 ts 包。使用xts 包,您可以使用rbind 合并2 个时间序列。

    • 首先我创建短时间序列
    • 我生成长 ts 假设它是 15 分钟间隔的常规 ts
    • 我使用rbind 合并这两个系列

    这是我的代码:

    library(xts)
    dat = as.xts(read.zoo(text='
    time Stamp count        ## a small hack here to read your data
    1 2014-01-15 14:30:00     2
    2 2014-01-15 16:30:00     3
    3 2014-01-15 17:00:00     2
    4 2014-01-15 17:15:00     1',
             header=TRUE,
             index=1:2,
             format='%Y-%m-%d %H:%M:%S',tz=''))
    
    ## generate the long ts
    tmpSeq <-
    seq.POSIXt(as.POSIXct('2014-01-15 14:00:00'),
        as.POSIXct('2014-01-22 13:00:00'),by = '15 mins')
    tmpSeq <- 
    xts(x=rep(0,length(tmpSeq)),tmpSeq)
    
    ## insert dat values in tmpSeq
    rbind(tmpSeq,dat)
    

    【讨论】:

      【解决方案3】:

      看来您正在寻找的是“合并”。看这个帖子:How to join (merge) data frames (inner, outer, left, right)?

      您需要一个右外连接(如果您将 tmpSeq 作为您的正确数据框)

      编辑: 在答案中添加合并语句,使答案更清晰:

      Right outer: merge(x = DF, y = data.frame(timeStamp=tmpSeq, count=0), all.y=TRUE)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-22
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        相关资源
        最近更新 更多