You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按另一DataFrame行顺序重排不同维度的DataFrame

解决方案:按指定DataFrame的国家顺序重排DF1

首先检查你之前代码的问题:你写的是DF1$country,但实际DF1的列名是Country(大小写不一致),这会导致match返回NA,排序失效,修正列名即可解决问题。

Base R 实现

基础排序(保留所有行,DF2中不存在的国家排在最后)

DF1_sorted <- DF1[order(match(DF1$Country, DF2$Country)), ]

仅保留DF2中存在的国家并排序

如果不需要DF2里没有的国家,可以先过滤再排序:

# 过滤出DF2中存在的国家
DF1_filtered <- DF1[DF1$Country %in% DF2$Country, ]
# 按DF2的国家顺序排序
DF1_sorted <- DF1_filtered[order(match(DF1_filtered$Country, DF2$Country)), ]

dplyr 实现

利用因子(factor)的水平(levels)来指定排序顺序,这是dplyr中更直观的方式:

基础排序

library(dplyr)

DF1_sorted <- DF1 %>%
  # 将Country转换为因子,水平设置为DF2的Country顺序
  mutate(Country = factor(Country, levels = DF2$Country)) %>%
  # 按因子水平排序
  arrange(Country)

过滤并排序

如果只保留DF2中存在的国家:

DF1_sorted <- DF1 %>%
  mutate(Country = factor(Country, levels = DF2$Country)) %>%
  # 过滤掉DF2中不存在的国家(对应因子为NA的行)
  filter(!is.na(Country)) %>%
  arrange(Country)

额外:同时按Score降序排序

如果需要在国家顺序基础上,每个国家内按Score降序排列,只需在arrange中添加desc(Score):

DF1_sorted <- DF1 %>%
  mutate(Country = factor(Country, levels = DF2$Country)) %>%
  filter(!is.na(Country)) %>%
  arrange(Country, desc(Score))

内容的提问来源于stack exchange,提问作者coffee_loving_narwhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:35:25