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 回答