如何在R的数据框中插入零

时间:2014-05-01 09:59:28

标签: r datetime dataframe

我有以下data.frame,DF DF已经在R.我们不需要使用read.csv或其他东西

加载它
            timeStamp count
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

我有一个“独立的时间戳序列”,从tmpSeq2014-01-15 14:00:002014-01-22 13:00:00。我想从此data.frame获取 List 计数,并为{。{}}中的timeStamp插入零,而不是tmpSeq

3 个答案:

答案 0 :(得分: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)

应该这样做。

答案 1 :(得分:0)

您正在寻找的是“合并”。看看这篇文章: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)

答案 2 :(得分:0)

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

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

这是我的代码:

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)