我有以下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
我有一个“独立的时间戳序列”,从tmpSeq
到2014-01-15 14:00:00
说2014-01-22 13:00:00
。我想从此data.frame获取 List 计数,并为{。{}}中的timeStamp
插入零,而不是tmpSeq
答案 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次系列。
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)