我有一个带有时间序列的.csv
文件。
我正在尝试使用ts()
,并绘制它!但我的初始数据集是一行一行。所以我想用频率做一张桌子。
我已经做到了,但是对于那些我没有数据的(现有)日子,我想分配0频率值!
以下是我的数据示例:
> table(ech$Date.Time) # Frequencies of observed dates
我使用以下方式生成了所有现有日期:
> seq.Date(from = min(ech$Date.Time), to = max(ech$Date.Time), by = 1)
以下是我想得到的结果:
我尝试了几件事,但它并没有按我喜欢的方式工作! 这是我尝试过的一个例子,但它没有打印任何内容,我也不理解错误信息。
> plot(ts(data = ech, deltat = table(ech$Date.Time)))
Error in plot(ts(data = ech, deltat = ech$Date.Time)) :
erreur d'évaluation de l'argument 'x' lors de la sélection d'une méthode pour la fonction 'plot' : Error in Ops.Date(1, deltat) : / not defined for "Date" objects
我应该在使用deltat
之前使用frequency
或ts()
或其他内容吗?
谢谢。
答案 0 :(得分:1)
您可以使用merge
将完整的日期序列组合到数据集中。
您需要确保日期列属于同一类(此时为日期)。
使用您的数据集和日期序列:
#sequence of dates
dates2 <- data.frame(dates = seq(as.Date('2014-04-05'), as.Date('2014-04-15'), by = 1))
#merging the ech to sequence of dates
newdf <- merge(dates2, ech, all.x = TRUE, by = 'dates')
#setting NA to zero
newdf$freq[is.na(newdf$freq)] <- 0
输出:
dates freq
1 2014-04-05 1
2 2014-04-06 1
3 2014-04-07 2
4 2014-04-08 0
5 2014-04-09 0
6 2014-04-10 2
7 2014-04-11 0
8 2014-04-12 1
9 2014-04-13 0
10 2014-04-14 2
11 2014-04-15 1
为了完成,我将其用作ech:
dates <- as.Date(c("2014-04-05", "2014-04-06", "2014-04-07",
"2014-04-10", "2014-04-12", "2014-04-14", "2014-04-15"))
freq <- c(1, 1, 2, 2, 1, 2, 1)
ech <- data.frame(dates, freq)