不一致的匹配函数,如果我 运行 两次有效 (R)
Inconsistent match function, if I run twice works (R)
我正在尝试根据另一个向量 trade_order
.
使用它的名称对数值向量 current_qty
重新排序
经过简单的匹配,他们给了我一些奇怪的安排。
current_qty <- getQuantity(trades)
print(names(current_qty))
[1] "ivvb11" "lft20210301" "ltn20180101" "ntnb20200815" "pibb11"
print(trade_order)
[1] "pibb11" "ivvb11" "lft20210301" "ntnb20200815" "ltn20180101"
current_qty <- current_qty[match(names(current_qty), trade_order)]
print(current_qty)
lft20210301 ltn20180101 pibb11 ntnb20200815 ivvb11
2.15 42.59 50.00 3.89 60.00
现在是有趣的部分。如果我运行相同的匹配函数两次。有效。
current_qty <- getQuantity(trades)
print(names(current_qty))
[1] "ivvb11" "lft20210301" "ltn20180101" "ntnb20200815" "pibb11"
print(trade_order)
[1] "pibb11" "ivvb11" "lft20210301" "ntnb20200815" "ltn20180101"
current_qty <- current_qty[match(names(current_qty), trade_order)]
current_qty <- current_qty[match(names(current_qty), trade_order)]
print(current_qty)
pibb11 ivvb11 lft20210301 ntnb20200815 ltn20180101
50.00 60.00 2.15 3.89 42.59
我做错了什么?还有其他方法吗?
来自 help(match)
:
"match returns a vector of the positions of (first) matches of its first argument in its second."
所以它查看 names(current_qty)
中的每个元素和 returns 它在 trade_order
中的位置。因此,例如它在 trade_order
的第二个位置看到 "ivvb11"
。然后这会传递给您的子集,在那里它会重新排序。所以这将做的是它将 current_qty
("lft20210301"
) 的位置 2 中的元素移动到第一个位置。
因此,您可以看到,您应该颠倒传递给 match 的参数的顺序,这样就没问题了:
current_qty[match(trade_order, names(current_qty))]
我正在尝试根据另一个向量 trade_order
.
current_qty
重新排序
经过简单的匹配,他们给了我一些奇怪的安排。
current_qty <- getQuantity(trades)
print(names(current_qty))
[1] "ivvb11" "lft20210301" "ltn20180101" "ntnb20200815" "pibb11"
print(trade_order)
[1] "pibb11" "ivvb11" "lft20210301" "ntnb20200815" "ltn20180101"
current_qty <- current_qty[match(names(current_qty), trade_order)]
print(current_qty)
lft20210301 ltn20180101 pibb11 ntnb20200815 ivvb11
2.15 42.59 50.00 3.89 60.00
现在是有趣的部分。如果我运行相同的匹配函数两次。有效。
current_qty <- getQuantity(trades)
print(names(current_qty))
[1] "ivvb11" "lft20210301" "ltn20180101" "ntnb20200815" "pibb11"
print(trade_order)
[1] "pibb11" "ivvb11" "lft20210301" "ntnb20200815" "ltn20180101"
current_qty <- current_qty[match(names(current_qty), trade_order)]
current_qty <- current_qty[match(names(current_qty), trade_order)]
print(current_qty)
pibb11 ivvb11 lft20210301 ntnb20200815 ltn20180101
50.00 60.00 2.15 3.89 42.59
我做错了什么?还有其他方法吗?
来自 help(match)
:
"match returns a vector of the positions of (first) matches of its first argument in its second."
所以它查看 names(current_qty)
中的每个元素和 returns 它在 trade_order
中的位置。因此,例如它在 trade_order
的第二个位置看到 "ivvb11"
。然后这会传递给您的子集,在那里它会重新排序。所以这将做的是它将 current_qty
("lft20210301"
) 的位置 2 中的元素移动到第一个位置。
因此,您可以看到,您应该颠倒传递给 match 的参数的顺序,这样就没问题了:
current_qty[match(trade_order, names(current_qty))]