使用R绘制具有离散数据的时间序列

时间:2010-08-01 17:18:27

标签: r statistics charts

问候,

我的表格如下所示:

      date value
2007-11-05 134
2007-12-08 234
2008-03-10 322
2008-03-11 123
...

总之,它的每日价值为三年,但它没有每天的价值。我需要的是绘制整个时间跨度的折线图(数据$ date,data $ value),但考虑到这一天,表没有指定值,它应该假设最后一个已知。换句话说,该表仅在其更改的日期具有值。

那里的任何R专家可以帮助我吗? : - )

提前致谢!

3 个答案:

答案 0 :(得分:1)

这样的东西?

require(zoo)
data = data.frame(date = as.Date(c('2007-11-05', '2007-12-08', '2008-03-10', '2008-03-11')), value = c(134, 234, 322, 123))
data = zoo(data$value, data$date)
days = seq(start(data), end(data), "day")
data2 = na.locf(merge(data, zoo(,days)))
plot(data2)

答案 1 :(得分:1)

雨果,一天的所有重复值是相同的值还是不同?如果相同,您可以使用sqldf包来选择不同的日期和值以及绘图。如果不同,您可以使用ggplot的geom_step类型绘制步骤图,并显示相同x轴值的范围。请参阅下面的代码示例,我为1/15/2008添加了两个值。

data = data.frame(date = as.Date(c('2007-11-05', '2007-12-08', '2008-03-10',  
                                   '2008-03-11', '2008-01-15', '2008-01-15')),  
                                  value = c(134, 234, 322, 123, 175, 275))
ggplot(data, aes(x = date, y = value)) + geom_step()

如果当天的多个值相同,那么ggplot只会将它们视为一个。

答案 2 :(得分:0)

试试这个。我们使用tail(x,1)读取数据汇总以获取任何一天的最后一天,然后我们绘制它。 (read.zoo行保持示例自包含,但实际上将被替换为注释掉的行。)

Lines <- "date value
2007-11-05 132
2007-11-05 134
2007-12-08 231
2007-12-08 234
2008-03-10 322
2008-03-11 123"

library(zoo)

# z <- read.zoo("myfile.dat", header = TRUE, aggregate = function(x) tail(x, 1))

z <- read.zoo(textConnection(Lines), header = TRUE, aggregate = function(x) tail(x, 1))
plot(z)