r - 按向量 B 对命名向量 A 的值进行排序,但尽可能保持名称顺序

标签 r sorting vector indexing matching

我有一个这样的命名向量:

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/

相关文章:

r - 在有空间的路径中调用可执行文件时出现问题

r - 转换数据框中的混合日期格式

c++ - 我的 for 循环怎么搞砸了?

r - 如何将列表元素名称分配给sheetName

r - 计算时间序列数据 R 中的返回

linux - 如何根据字段的数值对文件进行排序?

Linux 用户名/etc/passwd 列表

arrays - 在 New Swift 中对二维数组进行排序,之前的排序不起作用

c++ - 使用 std::find() 搜索多个元素

c++ - 将 vector append 到 vector 的最佳方法