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

如何合并R数据框指定列,生成‘列名:值’格式的合并列?

在R中合并指定列为“列名:值”格式的字符串

这里提供几种可行的解决方案,适配不同的代码风格:

方法1:使用dplyr的rowwise + c_across

这是tidyverse生态下直观的逐行处理方式:

library(dplyr)

df <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 27),
  Country = c("USA", "Canada", "UK"),
  Occupation = c("Engineer", "Doctor", "Teacher")
)

selected_cols <- c("Age", "Country")

df <- df %>%
  rowwise() %>%
  mutate(merged = paste(paste(selected_cols, c_across(all_of(selected_cols)), sep = ":"), collapse = ", ")) %>%
  ungroup()
  • rowwise() 确保每行独立计算
  • c_across(all_of(selected_cols)) 提取当前行指定列的所有值
  • 内层paste生成单个“列名:值”对,外层paste用逗号加空格拼接所有对

方法2:使用purrr的pmap_chr

适合喜欢函数式编程风格的场景:

library(dplyr)
library(purrr)

df <- df %>%
  mutate(merged = pmap_chr(select(., all_of(selected_cols)), 
                           ~paste(paste(selected_cols, c(...), sep = ":"), collapse = ", ")))
  • select(., all_of(selected_cols)) 筛选出目标列
  • pmap_chr 逐行遍历筛选后的列,c(...)捕获当前行的所有值
  • 同样通过两层paste完成格式拼接

方法3:基础R实现(无需额外包)

如果不想加载tidyverse包,可以直接用apply:

df <- data.frame(
  Name = c("Alice", "Bob", "Charlie"),
  Age = c(25, 30, 27),
  Country = c("USA", "Canada", "UK"),
  Occupation = c("Engineer", "Doctor", "Teacher")
)

selected_cols <- c("Age", "Country")

df$merged <- apply(df[, selected_cols], 1, function(x) {
  paste(paste(selected_cols, x, sep = ":"), collapse = ", ")
})
  • apply(df[, selected_cols], 1, ...) 按行处理目标列
  • 匿名函数内完成“列名:值”对的生成与拼接

以上三种方法最终都会生成你期望的merged列,输出示例:

[1] "Age:25, Country:USA"   "Age:30, Country:Canada" "Age:27, Country:UK"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:30:15