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

R语言中调整DataFrame行顺序以匹配另一个DataFrame的L、M列排序(保留对应G值)

R语言中调整DataFrame行顺序以匹配另一个DataFrame的L、M列排序(保留对应G值)

嘿,我明白你的需求了——要让df2的L和M列完全跟df1的排序一模一样,同时把对应的G值原封不动地带过来,而且df1本身完全不动对吧?这其实是个很常见的匹配行顺序的需求,我给你两种实用的方法,都能完美得到你想要的结果:

首先先把你提供的原始数据列出来,方便大家测试:

# 原始数据框
df1 <- data.frame(L= c(0, 1,1,2,2,2,3,3,3,3), M= c(0,0,1,0,1,2,0,1,2,3), G= (1:10))
df2<- data.frame(L=c(0,1,2,3,1,2,3,2,3,3), M= c(0,0,0,0,1,1,1,2,2,3), G= c(12, 13, 4, 6, 7, 54, 87,56,3,0))

方法一:使用基础R实现(无需额外包)

这种方法适合不想加载第三方包的场景,核心思路是先通过merge匹配对应行,再用match函数对齐顺序:

# 第一步:仅用df1的L、M列与df2合并,保证保留df1的所有行
merged_data <- merge(df1[, c("L", "M")], df2, by = c("L", "M"), all.x = TRUE)

# 第二步:根据df1的L、M组合字符串匹配行顺序,确保完全对齐
desired_result <- merged_data[match(paste(df1$L, df1$M), paste(merged_data$L, merged_data$M)), ]

# 重置行名(可选,让输出更整洁)
rownames(desired_result) <- NULL

执行完这段代码后,desired_result就和你想要的结果完全一致了:L、M列和df1完全相同,G列则是df2中对应(L,M)组合的数值。

方法二:使用dplyr包实现(更简洁直观)

如果你平时习惯用tidyverse系列工具,这个方法会更简洁,利用left_join自动保留左表顺序的特性:

# 先加载dplyr包(如果没安装先运行install.packages("dplyr"))
library(dplyr)

# 直接用df1的L、M作为左表,左连接df2,自动对齐顺序
desired_result <- df1 %>%
  select(L, M) %>%  # 仅保留需要匹配的列
  left_join(df2, by = c("L", "M"))  # 按L、M匹配,保留左表顺序

因为你的df2中每个(L,M)组合都和df1一一对应,所以left_join之后会直接继承df1的行顺序,一步到位就能得到目标结果。

你可以运行print(desired_result)验证,输出的内容就是你给出的预期结果:

# 预期输出
desired_result <- data.frame(L= c(0,1,1,2,2,2,3,3,3,3), M= c(0,0,1,0,1,2,0,1,2,3), G= c(12,13,7,4,54,56,6,87,3,0))

备注:内容来源于stack exchange,提问作者Milaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:14:37