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

R语言:高效合并含标记组合的DataFrame,规避嵌套循环

高效实现DataFrame匹配扩展的方法

核心思路是利用连接操作替代嵌套循环,这类方法在处理DataFrame时效率远高于循环,且代码简洁易维护。

方法一:使用dplyr包(推荐,代码可读性强)

利用left_join()实现左连接,自动将df1的Sample和Cells_in_Sample匹配到df2对应Population_ID的所有行:

library(dplyr)

final_df <- df2 %>%
  left_join(df1 %>% select(Population_ID, Sample, Cells_in_Sample),
            by = "Population_ID")
  • left_join()确保保留df2的所有行,仅填充df1中匹配的字段值
  • select()筛选df1中需要的列,避免冗余数据带入结果

方法二:使用base R原生函数(无需额外包)

用merge()函数同样能实现需求,设置all.x = TRUE实现左连接:

final_df <- merge(df2, df1[, c("Population_ID", "Sample", "Cells_in_Sample")],
                  by = "Population_ID", all.x = TRUE)
  • all.x = TRUE参数保证df2的所有行都被保留
  • df1[, c(...)]用来精准筛选需要匹配的列,减少计算量

示例验证

假设存在以下测试数据:

# 示例df1
df1 <- data.frame(
  Sample = c("S1", "S2"),
  Population_ID = c("A+B+C", "X+Y+Z"),
  Cells_in_Sample = c(1000, 800)
)

# 示例df2
df2 <- data.frame(
  Population_ID = c("A", "A+B", "A+B+C", "X", "X+Y", "X+Y+Z")
)

运行上述任意方法后,final_df结果如下:

Population_ID Sample Cells_in_Sample
1             A     S1            1000
2           A+B     S1            1000
3         A+B+C     S1            1000
4             X     S2             800
5           X+Y     S2             800
6         X+Y+Z     S2             800

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:45:55