我有一个这样的命名向量:
my_vec <- c("Max"= "England", "Manfred"= "Germany", "Ingolf"= "Germany", "Paul"= "England", "Peter"= "Germany", "Nina"= "Italy")
我需要按另一个向量中指定的国家/地区对该向量进行排序,同时保持给定国家/地区的人员顺序与以前一样。因此,如果国家/地区的顺序是...
sort_scheme <- c("England", "Germany", "Italy")
...那么我想要的输出是:
goal_vec <- c("Max"= "England", "Paul"= "England", "Manfred"= "Germany", "Ingolf"= "Germany", "Peter"= "Germany", "Nina"= "Italy")
如您所见,所需输出的国家/地区顺序与 sort_scheme
中的顺序相同。 (英格兰在前,然后是德国,然后是意大利)并且,在一个国家/地区内,姓名的原始顺序是相同的(对于英格兰,Max 排在第一位,然后是 Paul,依此类推)。该解决方案对于具有基本 R 的其他角色(新名称和国家)应该是灵活的。我想出的所有方法都非常麻烦。
编辑我发现这是一个duplicate并投票结束。
最佳答案
我们可以使用订单
:
my_vec[order(match(my_vec, sort_scheme))]
Max Paul Manfred Ingolf Peter Nina
"England" "England" "Germany" "Germany" "Germany" "Italy"
根据@MerijnvanTilborg - 如果需要使用向量名称进行“嵌套”排序(OP中不是这种情况),我们可以使用:
my_vec[订单(匹配(my_vec,sort_scheme),名称(my_vec))]
参见?订单
:
In the case of ties in the first vector, values in the second are used to break the ties.
关于r - 按向量 B 对命名向量 A 的值进行排序,但尽可能保持名称顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71498093/