你這裏有多個問題是正視在 「數據扯皮」 的區域。最大的問題是將實際值計入您的缺失值字段。 幸運的是,xts
時間系列庫包含這樣做的功能,以及繪製多個時間序列的功能,這是您的最終目標。
但是,在我們可以使用這些美妙的功能之前,您需要做一些工作,將您的數據轉換爲xts
對象。
首先使用@aelwan的方法重新創建您的數據。
```{r, tidy=TRUE}
df <- read.table(text = c("
CompanyA NA 1000 NA NA NA 1000
CompanyB 600 NA NA NA 600 NA
CompanyC NA 5000 NA 5000 NA NA"),
header = F)
colnames(df) <- c("CompanyName", "2001-01", "2001-02" ,"2001-03", "2001-04", "2001-05", "2001-06")
df
CompanyName 2001-01 2001-02 2001-03 2001-04 2001-05 2001-06
1 CompanyA NA 1000 NA NA NA 1000
2 CompanyB 600 NA NA NA 600 NA
3 CompanyC NA 5000 NA 500 NA NA
您的數據似乎是寬格式,所以我建議將其轉換爲長格式。這需要幾個步驟來保留重要信息,例如列名和行名以及數據類(數字)。
首先,移調數據幀
df_t <- t(df)
現在,保存的第一行,它現在包含的公司名稱。
company_names <- df_t[1,]
轉置過程產生類「矩陣」的對象。刪除第一行並使df_t對象類data.frame。
df_t <- data.frame(df_t[-1, ], stringsAsFactors = FALSE)
添加存儲在「company_names」公司名稱後面的列名
colnames(df_t) <- company_names
列數據類可能轉置過程中已丟失了,因此所有列轉換爲類數字與sapply
功能。現在
df_long <- data.frame(sapply(df_t, FUN=as.numeric), row.names = rownames(df_t))
# print the long form results
df_long
```
CompanyA CompanyB CompanyC
Jan 2001 NA 600 NA
Feb 2001 1000 NA 5000
Mar 2001 NA NA NA
Apr 2001 NA NA 5000
May 2001 NA 600 NA
Jun 2001 1000 NA NA
,轉換新的df_long
data.frame爲基於xts
對象來訪問你所需要的時間序列功能的時間序列指標。
```{r}
library(xts)
# convert rownames "2001-01, 2001-02, ..." to yearmon format
rownames(df_long) <- as.yearmon(rownames(df_long), "%Y-%m")
# pass the dates as an index to the xts via the `order.by` arguement.
df_xts <- xts(df_long , order.by = as.yearmon(rownames(df_long)))
```
最後,我們可以使用「最後一次觀測推進型」功能,na.locf
在xts
包填寫日期。
```{r}
df_locf <- na.locf(df_xts)
df_locf
```
CompanyA CompanyB CompanyC
Jan 2001 NA 600 NA
Feb 2001 1000 600 5000
Mar 2001 1000 600 5000
Apr 2001 1000 600 5000
May 2001 1000 600 5000
Jun 2001 1000 600 5000
當調用上xts
類的對象的plot
功能,多元時間序列曲線被容易地製造。
```{r}
# The plot function works.
plot(df_locf)
```
米娜嗨,你能不能請張貼代碼剪斷,它讓我們看到你的工作是什麼?謝謝 – Justin
今後,我建議您發佈您的數據(如我的答案),而不是打印屏幕,以方便其他人爲您提供幫助。另外,@Justin指出你應該展示你所做的努力(你試過的代碼,但不像你在你的問題中提到的那樣)。 – aelwan
@Mina 在你的問題中,你提到你有不同的年份,但對我來說,這是同一年,只是不同的日子或月份。你能否澄清這一點? – aelwan