2017-03-27 4 views
1

申し訳ありませんが、これは明らかな答えがあるかもしれませんが、私は何のためにそれを行うのか不明です。時系列データのRを小さくするには

セイを例えば私は人の名前のリストを持っているデータセットを持って、彼らが作った販売数、そして、彼らはそれらの販売をした日付、次の形式ですべて:基本的に

Name | Date |  Sales 
------------------------------------ 
AAA  | 01/01/2001 |  50 
AAA  | 01/02/2001 |  62 
AAA  | 01/03/2001 |  73 
...  | ...  |  ... 
AAA  | 05/15/2001 |  20 
BBB  | 02/06/2001 |  51 
BBB  | 02/09/2001 |  45 
...  | ...  |  ... 
BBB  | 04/13/2001 |  3 
CCC  | 01/22/2001 |  78 
...  | ...  |  ... 
...  | ...  |  ... 

私のデータはちょっと上のように見えます - 複数の異なる名前があり、また各名前の日付が正しく整列していない(例えば、1人が他の人と比較して早い時期に始めるかもしれないので、年に)。それに加えて、日付は前にスキップして、2001年4月3日の日付があり、次のセルで2001年4月25日に前進することがあります。

今私がしたいことは、1年間のデータをプロットして、すべての異なる人物(AAA、BBB、CCCなど)と、それらの販売をすべて1つの大きなプロットにしました。

ここでは、まずsubset()関数を使用し、データセットを名前でサブセット化することで、このようにデータをプロットすることができます。問題は、これが少し非効率であることがわかっていることです。データがちょっと変わっても、時系列データをプロットするには、Rにははるかに優れた方法が必要です。誰かがいくつかの提案をしている、または少しの助けを与えることができたら、私はそれを感謝します、事前に感謝します。

+0

、あなたは再現例http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exampleを提供してくださいだろうか? – aelwan

+0

非常に申し訳ありませんが、あなたのコメントは私が探していたものでしたが、私はそれを受け入れる前に正しく応答したいと思っていました:) – ThePlowKing

+0

心配はいりません。私は私の答えがあなたが探していたものでなければ助けたいと思っていました。 – aelwan

答えて

3

このようなものをお探しですか?将来的には

library(dplyr) 
library(tidyr) 
library(ggplot2) 
#Create data.frame 
Date <- as.Date(c(seq(as.Date("2001-01-03"), as.Date("2001-10-17"), by = 1), 
        seq(as.Date("2001-05-10"), as.Date("2001-12-17"), by = 1), 
        seq(as.Date("2001-04-12"), as.Date("2001-11-17"), by = 1))) 
Name <- c(rep("AAA", 288), rep("BBB", 222), rep("CCC", 220)) 
Sales <- c(sample(10:20, 288, replace = T), sample(50:60, 222, replace = T), sample(80:90, 220, replace = T)) 
df <- data.frame(Name, Date, Sales) 

#select specific rows(dates) to create irregular time series (missing dates) 
df1 <- df[c(1:50, 100:150, 190:288, 289:370, 400:450, 480:510, 511:640, 670:730),] %>% 
    tidyr::spread(Name, Sales) 

#create a data.frame (df_whole_yr) that have continuous dates for whole 2001 
df_whole_yr <- data.frame(Date = seq(as.Date("2001-01-01"), as.Date("2001-12-31"), by = 1)) %>% 
    dplyr::left_join(., df1, by ="Date") %>% #join irregular timeseries df1 with the continuous timeseries df_whole_yr 
    tidyr::gather("Name", "Sales", 2:4) %>% #convert it to long format 
    ggplot(., aes(x =Date, y = Sales, color = Name))+ ##plot 
    geom_line(size = 0.2) 

enter image description here

+1

これは、3つの時系列が規則的であると仮定しています... OPの系列の不規則性を考慮に入れるように注意しますか? – useR

+2

@useR ありがとうございました。私は答えを更新しました。 OPのシリーズの不規則性をまだ考慮していないと思ったら教えてください。 OPがdata.frameを提供した方がはるかに簡単でした。 – aelwan

+1

このメソッドはまさに私が探していたもので、各行にコメントしてくれてありがとう、以前はこれらのパッケージを使用したことがないので非常に便利です。そうしなければ各行が何を意味するのか分かりません – ThePlowKing

関連する問題