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

如何让合并后的DataFrame行顺序与原两个DataFrame共同列顺序一致

保持DataFrame合并后的自定义行顺序问题

你当前使用merge()函数合并两个DataFrame时,默认会对Attribute Name列进行字母排序,导致最终结果的行顺序不符合预期。要实现先遵循alltr的行顺序,再遵循allev的行顺序,不需要手动指定顺序列表,可以用以下两种方法:

方法一:直接行绑定(推荐)

因为两个DataFrame的Attribute Name没有重叠值,直接用dplyr包的bind_rows()函数拼接,会保留原DataFrame的行顺序,缺失的列自动填充NA:

# 加载dplyr包
library(dplyr)

# Sample dataframes
alltr <- data.frame(
  `Attribute Name` = c("Age", "Gender"),
  Value_x = c(254, 100)
)

allev <- data.frame(
  `Attribute Name` = c("Income", "Area"),
  Value_y = c(708, 500)
)

# 行绑定合并
merged_df <- bind_rows(alltr, allev)

运行后merged_df的Attribute Name顺序就是Age, Gender, Income, Area,完全符合需求。

方法二:merge后按原顺序重新排序

如果一定要使用merge()函数,可以先完成合并,再基于alltr和allev的原始顺序重新排序:

# Sample dataframes
alltr <- data.frame(
  `Attribute Name` = c("Age", "Gender"),
  Value_x = c(254, 100)
)

allev <- data.frame(
  `Attribute Name` = c("Income", "Area"),
  Value_y = c(708, 500)
)

# 合并DataFrame
merged_df2 <- merge(alltr, allev, by = "Attribute Name", all = TRUE)

# 获取原始顺序:先alltr的Attribute Name,再allev的
original_order <- c(alltr$`Attribute Name`, allev$`Attribute Name`)

# 按原始顺序重新排序
merged_df2 <- merged_df2[match(original_order, merged_df2$`Attribute Name`), ]

这种方法通过match()函数匹配原始顺序,避免了手动输入顺序列表的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:23:19