如何在R语言中根据一个向量的排序规则对两个关联向量排序?
解决R中配对向量同步排序的问题
刚好我经常处理这类配对数据的排序需求,用order()函数绝对是最直接高效的方式——它能帮我们获取第一个向量排序后的位置索引,再用这个索引重新排列两个向量,就能保证对应关系完全不变。下面给你一步步演示:
步骤1:定义原始向量
先把你给出的两个向量明确下来(方便直接复制运行):
list_1 <- c(17.5, 19.3, 17.0, 16.5, 19.4, 19.0, 19.6, 20.7, 18.5, 19.0, 20.2, 21.0, 19.7, 19.5, 17.0, 20.2, 19.3, 19.6, 19.9, 18.4, 18.6, 19.5) list_2 <- c(24.5, 24.5, 24.0, 23.9, 25.8, 27.5, 29.1, 26.5, 28.1, 26.5, 29.2, 30.5, 27.0, 28.5, 25.2, 28.5, 29.1, 29.1, 26.8, 27.8, 26.5, 26.8)
步骤2:获取排序索引
用order(list_1)生成list_1从小到大排序的位置索引,这个索引会告诉我们:要得到排序后的list_1,需要按什么顺序取原向量的元素:
sorted_indices <- order(list_1)
步骤3:同步排序两个向量
用刚才得到的索引,分别对list_1和list_2重新取值,这样就能保证每一对元素的对应关系完全保留:
sorted_list_1 <- list_1[sorted_indices] sorted_list_2 <- list_2[sorted_indices]
可选:用数据框查看对应关系
如果想更直观地看到排序后的配对结果,把它们放进数据框里是个不错的选择:
sorted_pairs <- data.frame( list_1_sorted = sorted_list_1, list_2_matched = sorted_list_2 ) # 打印结果 print(sorted_pairs)
运行后你会看到,list_1_sorted是从小到大排列的,而list_2_matched的每一个值都和原数据中list_1对应的值完全匹配——比如原list_1里的16.5对应list_2的23.9,排序后它俩依然是第一行的配对。
内容的提问来源于stack exchange,提问作者Stennis
相关产品推荐
相关产品推荐

