準備

library(xts)  # ライブラリの読み込み

時系列オブジェクトの作成

xts(data, orderd.by = “時系列のインデックス”)

data.xts <- xts(
  runif(10),
  order.by = as.Date(paste0("2016-01-", 1:10))
  )
head(data.xts)
##                 [,1]
## 2016-01-01 0.1092321
## 2016-01-02 0.5052638
## 2016-01-03 0.6037308
## 2016-01-04 0.8946514
## 2016-01-05 0.6181622
## 2016-01-06 0.2056680

データの抽出

時系列インデックスの抽出

index(data.xts)
##  [1] "2016-01-01" "2016-01-02" "2016-01-03" "2016-01-04" "2016-01-05"
##  [6] "2016-01-06" "2016-01-07" "2016-01-08" "2016-01-09" "2016-01-10"

データ部分の抽出

data <- coredata(data.xts)
head(data)
##           [,1]
## [1,] 0.1092321
## [2,] 0.5052638
## [3,] 0.6037308
## [4,] 0.8946514
## [5,] 0.6181622
## [6,] 0.2056680

特定日付のデータ抽出

data.xts["2016-01-01::2016-01-03"]
##                 [,1]
## 2016-01-01 0.1092321
## 2016-01-02 0.5052638
## 2016-01-03 0.6037308
data.xts["2016-01-05::"]
##                 [,1]
## 2016-01-05 0.6181622
## 2016-01-06 0.2056680
## 2016-01-07 0.5930033
## 2016-01-08 0.7627039
## 2016-01-09 0.9352069
## 2016-01-10 0.7273454

マージ

データの準備

data.xts2 <- xts(
  runif(5),
  order.by = as.Date(paste0("2016-01-", c(1, 7:10)))
  )
head(data.xts2)
##                  [,1]
## 2016-01-01 0.03063953
## 2016-01-07 0.23605390
## 2016-01-08 0.61175637
## 2016-01-09 0.56997284
## 2016-01-10 0.76232304

マージ

data.mer <- merge(data.xts, data.xts2)
head(data.mer)
##             data.xts  data.xts2
## 2016-01-01 0.1092321 0.03063953
## 2016-01-02 0.5052638         NA
## 2016-01-03 0.6037308         NA
## 2016-01-04 0.8946514         NA
## 2016-01-05 0.6181622         NA
## 2016-01-06 0.2056680         NA

マージ(共通部分だけ得る)

data.mer.all <- merge(data.xts, data.xts2, all = FALSE)
head(data.mer.all)
##             data.xts  data.xts2
## 2016-01-01 0.1092321 0.03063953
## 2016-01-07 0.5930033 0.23605390
## 2016-01-08 0.7627039 0.61175637
## 2016-01-09 0.9352069 0.56997284
## 2016-01-10 0.7273454 0.76232304

欠損値を直近のデータで埋める

data.mer.locf <- na.locf(data.mer)
head(data.mer.locf)
##             data.xts  data.xts2
## 2016-01-01 0.1092321 0.03063953
## 2016-01-02 0.5052638 0.03063953
## 2016-01-03 0.6037308 0.03063953
## 2016-01-04 0.8946514 0.03063953
## 2016-01-05 0.6181622 0.03063953
## 2016-01-06 0.2056680 0.03063953

関数の適用

rollapply(data, 計算範囲, 関数, align = 基準日からの方向)
align

  • “right” 基準日から遡る範囲
  • “left” 基準日より後の範囲
rollapply(data.xts, 3, mean, align = "right")
##                 [,1]
## 2016-01-01        NA
## 2016-01-02        NA
## 2016-01-03 0.4060756
## 2016-01-04 0.6678820
## 2016-01-05 0.7055148
## 2016-01-06 0.5728272
## 2016-01-07 0.4722779
## 2016-01-08 0.5204584
## 2016-01-09 0.7636380
## 2016-01-10 0.8084187

カレンダー周期での適用

  • 日ごとに集計:apply.daily
  • 週ごとに集計:apply.weekly
  • 月ごとに集計:apply.monthly
  • 四半期ごとに集計:apply.quarterly
  • 年ごとに集計:apply.yearly
apply.weekly(data.xts, mean)
##                 [,1]
## 2016-01-03 0.4060756
## 2016-01-10 0.6766773

「データから価値を創造する」一般社団法人データマーケティングラボラトリー

Copyright© DML All Rights Reserved.