如何让合并后的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
相关产品推荐
相关产品推荐

