2017-10-06 19 views
1

RとXTSはかなり新しいです。紛らわしいタイトルを許してください、下の例は私の質問をよりよく説明するはずです。質問How to get value by column name in R?は、おそらく私がXTSオブジェクトを使って作業しているため、多分役に立たなかったでしょう。新しいXTS列は列名の列の列名に基づいて

私は、XTSオブジェクト内の他の列の名前である文字列の列を持っています。

xts_bars <- structure(c("1", "1", "1", "1", "-1", "-1", "-1", "-1", "action4", 
"action4", "action", "action"), .indexCLASS = c("POSIXct", "POSIXt"), 
tclass = c("POSIXct", "POSIXt"), tzone = "", class = c("xts", "zoo"), 
index = c(1506620100, 1506620400, 1506620700, 1506621000), .Dim = c(4L, 3L), 
.Dimnames = list(NULL, c("action", "action4", "column_names"))) 

私は、新しい列を作成し、各列の名前の列の値で各行を移入します。

xts_bars$column_names 
xts_bars$new_column = xts_bars[,xts_bars$column_names] 

これが機能していない、それはNEW_COLUMN」列の前に3余分な列を作成しています:

    action action4 column_names action4.1 action4.2 action.1 new_column 
2017-09-28 12:35:00 "1" "-1" "action4" "-1"  "-1"  "1"  "1"  
2017-09-28 12:40:00 "1" "-1" "action4" "-1"  "-1"  "1"  "1"  
2017-09-28 12:45:00 "1" "-1" "action"  "-1"  "-1"  "1"  "1"  
2017-09-28 12:50:00 "1" "-1" "action"  "-1"  "-1"  "1"  "1" 

'NEW_COLUMN' 列は-1、-1、1、1

が含まれている必要があります
+0

「写真は1000語の価値がある」と言われることがありますが、これはデータの写真には当てはまりません。 [再現可能な例](https://stackoverflow.com/q/5963269/271616)を入力してください。あなたの写真はxtsオブジェクトではありません。 xtsオブジェクトに型を混在させることはできません。また、xtsオブジェクトには "Date"列がありません。 –

+0

@JoshuaUlrichあなたのIBrokersパッケージからXTSオブジェクトをwrite.zoo()すると、 "Date"カラムがCSVファイルのものでした。 XTSオブジェクトのタイプを混在させないように注意してください。RStudioでは、文字列を追加するときにNA強制警告が表示されますが、2回目にその行をXTSオブジェクトに強制しても、 (xts_bars)。 – sshemtov

答えて

0

最初に気になるのは、オブジェクトをサブセット化するために行列を使うことです。現在はmatrix subsetting on xts objectsを実行することはできませんが、coredata()を使用して基礎となる行列を抽出することができます。

まず、xtsオブジェクトをサブセット化するために使用する行列を構築する必要があります。各行には2つの列が必要です。最初の列は抽出する要素の行番号で、2番目の列は抽出する要素の列番号です。それぞれの行は、抽出されたベクトル内の要素のペアのうち、ijと考えることができます。

列名で抽出するので、各名前に対応する列番号を見つける必要があります。あなたはmatch()機能でそれを行うことができます。行番号は単に1:nrow(xts_bars)です。

# Find the value in xts_bar$column_names in colnames(xts_bars) 
col_nums <- match(xts_bars$column_names, colnames(xts_bars)) 
# Create subset matrix 
subset_matrix <- cbind(1:nrow(xts_bars), col_nums) 

今すぐあなたのXTSはsubset_matrixを使用してオブジェクトサブセットする必要があります。それは現時点では不可能なので、coredata()を使って基本となる行列を抽出し、それをサブセット化することができます。

# Create new column 
xts_bars$new_column <- coredata(xts_bars)[subset_matrix] 
xts_bars 
#      action action4 column_names new_column 
# 2017-09-28 12:35:00 "1" "-1" "action4" "-1"  
# 2017-09-28 12:40:00 "1" "-1" "action4" "-1"  
# 2017-09-28 12:45:00 "1" "-1" "action"  "1"  
# 2017-09-28 12:50:00 "1" "-1" "action"  "1" 
+0

は、サンプルデータよりも多くの列にわたって完全に機能しました。また、私の質問を編集していただきありがとうございます。これは将来の質問に役立ちました。私はあなたの答えをアップ投票しましたが、私は新しいので、登録しませんでした。おそらく他の誰かが私のためにそれをアップ投票することができます。ありがとう! – sshemtov

+0

@sshemtov:喜んで助けてください!再現可能な例に対する私の要求に積極的に応答してくれてありがとう。それはあなたを助けることをずっと容易にしました。あなたが上院に投票することができないかもしれませんが、あなたはチェックマークをクリックして私の答えを受け入れることができます。それはあなたの質問があなたの満足のために答えられたことを他人に知らせます。 –

+0

ちょうど答えがチェックマークを見ていない受け入れ、再度ありがとう! – sshemtov

関連する問題