根据索引〜文本排序数组

时间:2013-04-09 10:23:21

标签: arrays r indexing

请输入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的顺序。

我该怎么办?

1 个答案:

答案 0 :(得分: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

这是有效的,因为如果使用字符向量索引数据框的行,则索引将基于行名称。