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

在R语言中合并同列结构的两个DataFrame并拼接对应列内容

在R中批量合并两个DataFrame的对应列内容

假设我们有两个结构匹配的DataFrame,其中一个存储数值,另一个存储对应的百分比字符串,需要将对应列的内容拼接成「数值 (百分比)」的格式,以下是两种高效实现方式:

方法一:Base R 实现(无需额外包)

利用mapply批量处理每一列,同时保留id列:

# 示例数据
a <- data.frame(
  id = seq(1, 4),
  a = c(0, 0, 1, 1),
  b = c(3, 3, 1, 1)
)

b <- data.frame(
  id = seq(1, 4),
  a = c("0%", "0%", "50%", "50%"),
  b = c("37.5%", "37.5%", "12.5%", "12.5%")
)

# 获取需要处理的列名(排除id)
cols <- setdiff(names(a), "id")

# 批量拼接对应列
result_list <- mapply(function(x, y) paste(x, paste0("(", y, ")"), sep = " "), a[cols], b[cols])

# 转换为DataFrame并合并id列
result <- cbind(a["id"], as.data.frame(result_list))

方法二:dplyr 实现(简洁高效,适合多列场景)

使用dplyr的across函数批量处理所有目标列,代码更简洁:

library(dplyr)

result <- a %>%
  left_join(b, by = "id", suffix = c("_num", "_pct")) %>%
  mutate(across(ends_with("_num"), 
                ~paste(., get(gsub("_num", "_pct", cur_column())), sep = " ("),
                .names = "{gsub('_num', '', .col)}")) %>%
  mutate(across(ends_with(")"), ~paste0(., ")"))) %>%
  select(id, all_of(cols))

两种方法都能处理任意数量的列,只需保证两个DataFrame的列名(除id外)完全匹配、行数一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:57:06