2016-10-07 5 views
1

は、次のデータフレームxts:as.xtsの後にデータ型を制御する方法?

time <-c('2016-04-13 23:07:45','2016-04-13 23:07:55','2016-04-13 23:08:45','2016-04-13 23:08:45' 
     ,'2016-04-13 23:08:45','2016-04-13 23:07:50','2016-04-13 23:07:51') 
group <-c('A','A','A','B','B','B','B') 
value<- c(5,10,2,2,NA,1,4) 
df=data.frame(time,group,value) 

> df 
       time group value 
1 2016-04-13 23:07:45  A  5 
2 2016-04-13 23:07:55  A 10 
3 2016-04-13 23:08:45  A  2 
4 2016-04-13 23:08:45  B  2 
5 2016-04-13 23:08:45  B NA 
6 2016-04-13 23:07:50  B  1 
7 2016-04-13 23:07:51  B  4 

注意欠損値の行5を検討してください。今度は、lubridateを使用して、私のタイムスタンプを適切なPosixタイプに変換した後、xtsに変換します。

> df$time = ymd_hms(df$time) 
> df<-as.xts(df,order.by=df$time) 
> df 
        time     group value 
2016-04-13 23:07:45 "2016-04-13 23:07:45" "A" " 5" 
2016-04-13 23:07:50 "2016-04-13 23:07:50" "B" " 1" 
2016-04-13 23:07:51 "2016-04-13 23:07:51" "B" " 4" 
2016-04-13 23:07:55 "2016-04-13 23:07:55" "A" "10" 
2016-04-13 23:08:45 "2016-04-13 23:08:45" "A" " 2" 
2016-04-13 23:08:45 "2016-04-13 23:08:45" "B" " 2" 
2016-04-13 23:08:45 "2016-04-13 23:08:45" "B" NA 

と私の素敵なnumericvalueは今characterです!

どうすれば避けることができますか?

ありがとうございます!

答えて

3

データの基になるxtsオブジェクトは、数値型または文字型でも、両方ともではない行列です(各列がRの任意のアトミック型であるリストであるdata.frameとは異なります)。これが起こる見ての大まかなチェックはこれを試してみることです。

> as.matrix(df) 
    time     group value 
[1,] "2016-04-13 23:07:45" "A" " 5" 
[2,] "2016-04-13 23:07:55" "A" "10" 
[3,] "2016-04-13 23:08:45" "A" " 2" 
[4,] "2016-04-13 23:08:45" "B" " 2" 
[5,] "2016-04-13 23:08:45" "B" NA 
[6,] "2016-04-13 23:07:50" "B" " 1" 
[7,] "2016-04-13 23:07:51" "B" " 4" 

xtsオブジェクトを作成するときにどのようなcoredataリターンである:

x.df<- xts(df,order.by=df$time) 
> coredata(x.df) 
    time     group value 
[1,] "2016-04-13 23:07:45" "A" " 5" 
[2,] "2016-04-13 23:07:50" "B" " 1" 
[3,] "2016-04-13 23:07:51" "B" " 4" 
[4,] "2016-04-13 23:07:55" "A" "10" 
[5,] "2016-04-13 23:08:45" "A" " 2" 
[6,] "2016-04-13 23:08:45" "B" " 2" 
[7,] "2016-04-13 23:08:45" "B" NA 

XTSを作成するときにtimegroup列を削除取得するオブジェクト期待どおりの数値データです。グループの列型を整数にマップできます。 order.byには時刻情報が既に含まれているため、x引数のxtsオブジェクト作成にtimeを含めないでください。

df$group_idx <- as.numeric(as.factor(df$group)) 
x.df<- xts(df[, c("group_idx", "value")],order.by=df$time) 
> x.df 
        group_idx value 
2016-04-13 23:07:45   1  5 
2016-04-13 23:07:50   2  1 
2016-04-13 23:07:51   2  4 
2016-04-13 23:07:55   1 10 
2016-04-13 23:08:45   1  2 
2016-04-13 23:08:45   2  2 
2016-04-13 23:08:45   2 NA 
+0

詳細な回答ありがとうございます。それは興味深い。私は 'xts'(偉大な' pandas'からのもの)にはかなり新しくなっていますが、 'xts'のその限界は私には大きな打撃を与えるようです。つまり、ISINコード、セクター名、その他の文字列などの情報は持ち運びできません。基本的に、 'xts'は' dplyr'や 'data.table' +' lubridate'といったことはできません。 –

+2

いくつかの定性的情報を属性として 'xts'オブジェクトに格納することができます。 xtsは時系列データのサブセット化を非常に簡単にします*異なる時間周波数での時系列データのマージ*はマージとna.locfで簡単ですが、TTR関数は自然にその関数で動作し、高速です... Jeff Ryanのページをチェックしてくださいクオンタム(google it)でxtsの本当の力を見てください。 – FXQuantTrader

+2

私は通常、セキュリティ価格/値を単一のxtsオブジェクトに混在させて使用しません。異なる証券に対して異なるxtsオブジェクトを使用します(これにより、グループ列の必要性がなくなります) – FXQuantTrader

関連する問題