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

如何在R语言中为DataFrame行内各元素拼接对应列前缀?

解决方案

这需求很清晰,咱们可以用两种常见的方式来实现——一种是用tidyverse工具链(代码更直观易读),另一种是基础R写法(不用额外装包),我分别给你演示:

方法一:使用tidyverse包(dplyr + stringr)

这种写法逻辑更清晰,适合处理数据框的批量操作:

library(dplyr)
library(stringr)

# 你的原始数据
C1 <- c("abcd > de > efg", "hij > kl > iiii", "aa", "a > bbb")
C2 <- c("1980","1982","1989","1989")
df <- data.frame(C1, C2, stringsAsFactors = FALSE)

# 生成目标结果列
df <- df %>%
  mutate(
    # 第一步:把C1按" > "分割成单个元素的列表
    split_C1 = str_split(C1, " > "),
    # 第二步:给每个分割后的元素拼接对应C2的年份,再重新用" > "连接
    result = map_chr(split_C1, ~{
      str_c(C2[cur_group_rows()], ., sep = "") %>% 
      str_c(collapse = " > ")
    })
  )

# 查看最终结果
print(df$result)
# 输出:
# [1] "1980abcd > 1980de > 1980efg" "1982hij > 1982kl > 1982iiii"
# [3] "1989aa"                      "1989a > 1989bbb"

方法二:基础R写法(无需额外装包)

如果不想加载第三方包,用mapply可以实现逐行处理:

# 你的原始数据
C1 <- c("abcd > de > efg", "hij > kl > iiii", "aa", "a > bbb")
C2 <- c("1980","1982","1989","1989")
df <- data.frame(C1, C2, stringsAsFactors = FALSE)

# 生成目标结果列
df$result <- mapply(function(c1_val, c2_val) {
  # 分割C1的内容
  parts <- strsplit(c1_val, " > ")[[1]]
  # 拼接年份后重新连接
  paste0(c2_val, parts, collapse = " > ")
}, df$C1, df$C2)

# 查看最终结果
print(df$result)

核心逻辑说明

两种方法的核心思路是一致的:

  1. 将C1中的每个字符串按" > "分割成独立的片段;
  2. 给每个片段前面拼接对应行C2的年份值;
  3. 再用" > "把处理后的片段重新连接成完整的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:02:08