2014-07-25 24 views
0

如果你有幾年的年度數據,但只有最新一年的部分年份數據,有沒有一種程序化的方式來擴展最新的一年的數據,大概使用ggplot2和geom_bar來表示全年的數據如果部分年份的數據是外推的?如何根據全年計算添加到geom_bar?

這是一個小例子。假設2014年的數字是半年。有沒有辦法在「欄的上方」添加相同的數量,即外推半年的數據,以不同的顏色或填充它?

yrs <- data.frame(Id = c(1, 2, 3), Year = c(2012, 2013, 2014), Amount = c(5e6, 6e6, 3e6)) 

ggplot(yrs, aes(x = Year, y = Amount)) + geom_bar(stat = "identity") 

回答

0

爲什麼不添加一個類型變量來區分實際收入和預計收入,像這樣?

yrs <- data.frame(Id = c(1, 2, 3,4), Year = c(2012, 2013, 2014,2014), 
Amount = c(5, 6, 3, 4)) 


yrs$type <- c(rep("Actual",3),"Projected") 

然後,您可以繪製與填充條形圖設置爲輸入這樣的:

ggplot(yrs, aes(x = Year, y = Amount,fill=type)) + geom_bar(stat = "identity") 

給你這個圖:據

enter image description here

爲擴展數據,在R中有很多預測方法。最簡單的方法是使用線性模型:lm

如果您使用的數據集,而不最近一年,並運行lm(Amount ~ Year, data = years)你會得到輸出如下:

Call: 
lm(formula = Amount ~ Year, data = yrs) 

Coefficients: 
(Intercept)   Year 
     -2007   1 

您可以使用係數上一年的「外推」的最新年份的值。所以在這種情況下,我們2014年的外推值將爲7.

yrs$Amount[2] + linear_model$coeff[2] 
Year 
    7 
+0

@bjosoph,那太棒了!謝謝。你的建議比我想象的要多得多。我的想法是將部分年份定義爲一個對象YTD,然後創建一個對象項目,將YTD乘以年/剩餘月數。根據你的數字和半年,年初至今等於6/6或4的4倍。但是,那麼,如何讓ggplot識別YTD的填充類型? – lawyeR

+0

你可以創建一個名爲'ytd'的新列(或其他),並給它兩個值'acutal'和'projected',然後只是執行'fill = ytd'或者你所謂的列 – bjoseph