1

これらのデータを入れてくださいR

S.names <- c("FXI", "XLB", "GLD", "IWM", "XLE", "XLF", "EWZ", "GDX", "XLK", 
"TLT", "IYR", "QQQ", "SLV", "EWJ", "XLV", "DIA", "XHB", "EEM", 
"USO", "VWO", "SPY", "EFA")
strike_vec <- structure(list(Strike = c(152, 43, 61, 11, 56, 37, 36, 159, 96, 
74, 71, 27, 163, 128, 35, 44, 30, 40, 81, 19, 31, 48)), .Names = "Strike", row.names = 
c("DIA", "EEM", "EFA", "EWJ", "EWZ", "FXI", "GDX", "GLD", "IWM", "IYR", 
"QQQ", "SLV", "SPY", "TLT", "USO", "VWO", "XHB", "XLB", "XLE", 
"XLF", "XLK", "XLV"), class = "data.frame")

ご覧のとおり、strike_vec行名はS.names要素と同じです。

strike_vecの順序に従って要素を並べ替えたいと思います。S.namesつまり、各strike_vec要素を、対応するS.names行名が見つかった位置に関連付けます。

最終結果は次のようになります

> strike_vec.new
    [,1]
FXI   37
XLB   40
GLD  159
IWM   96
   ...
   ...
   ...

ここでrownames(strike_vec.new)、 の順序が正確に続きますS.names

どうすればいいですか?

4

1 に答える 1

1

使用するだけです:

strike_vec[S.names,,drop=FALSE]

与える:

    Strike
FXI     37
XLB     40
GLD    159
IWM     96
XLE     81
XLF     19
EWZ     56
GDX     36
XLK     31
TLT    128
IYR     74
QQQ     71
SLV     27
EWJ     11
XLV     48
DIA    152
XHB     30
EEM     43
USO     35
VWO     44
SPY    163
EFA     61

これが機能するのは、データ フレームの行に文字ベクトルを使用してインデックスを付ける場合、インデックスは行名に基づくためです。

于 2013-04-09T10:25:31.697 に答える