2010-08-01 108 views
0

問候一個時間序列,基於R來繪製離散數據

我有一個看起來像下面的表格:

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

總之,它有三年的日常值,但它不每天都沒有價值。我需要的是繪製整個時間跨度的折線圖(數據$日期,數據$值),但考慮到那些日子中表沒有指定值,它應該假定最後一個已知值。換句話說,表格只有在它改變的日子裏纔有值。

任何R專家都可以幫我一把嗎? :-)

在此先感謝!

回答

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) 
+0

嗯......「一個帶有全序索引觀察方法的S3類,它是特別針對數值向量/矩陣和因子的不規則時間序列,動物園的關鍵設計目標是通過提供擴展標準泛型的方法,使特定索引/日期/時間級別的獨立性以及與ts和base R的一致性。 – 2010-08-01 17:31:46

+0

偉大的:-)我雖然有一個問題。我的原始數據有一天的重複值,我只想考慮最後一個數據(更不用說錯誤'系列不能與一個系列中的非唯一索引條目合併')。你能給我一個關於這個的暗示嗎? – 2010-08-01 17:54:23

+2

我認爲aggregate.zoo會這樣做。請訪問http://cran.r-project.org/web/packages/zoo/vignettes/zoo-faq.pdf查看動物園FAQ。 – 2010-08-01 18:08:20

1

雨果,都是一天中重複值相同或不同的值嗎?如果相同,則可以使用sqldf軟件包來選擇不同的日期和值以及繪圖。如果不同,可以使用ggplot的geom_step類型作爲步驟圖,並顯示相同x軸值的範圍。請參閱下面的代碼示例,我在2008年1月15日添加了兩個值。

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將會看到它們爲一個。

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)