带R的频率表(来自原始时间序列)

时间:2017-01-17 23:28:47

标签: r date time-series

我有一个带有时间序列的.csv文件。 我正在尝试使用ts(),并绘制它!但我的初始数据集是一行一行。所以我想用频率做一张桌子。 我已经做到了,但是对于那些我没有数据的(现有)日子,我想分配0频率值!

以下是我的数据示例:

> table(ech$Date.Time) # Frequencies of observed dates

table : frequencies of observed dates

我使用以下方式生成了所有现有日期:

> seq.Date(from = min(ech$Date.Time), to = max(ech$Date.Time), by = 1)

以下是我想得到的结果:

result wanted

我尝试了几件事,但它并没有按我喜欢的方式工作! 这是我尝试过的一个例子,但它没有打印任何内容,我也不理解错误信息。

> 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之前使用frequencyts()或其他内容吗?

谢谢。

1 个答案:

答案 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)