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

R语言:将DataFrame中含"+"的字段拆分并生成新行

解决R中多列数据按分隔符拆分并对齐行的问题

可以使用tidyverse工具包实现需求,核心思路是将每列中用+分隔的内容拆分为单独元素,再将各列补空对齐到最长列的长度,最终合并为新的DataFrame。

步骤1:加载工具包并定义原始数据

library(tidyverse)

# 原始数据
df <- data.frame(
  G1 = c("GH13_22+CBM4", "GH109+PL7+GH9", "GT57", "AA3", "", ""),
  G2 = c("GH13_22", "", "GT57+GH15", "AA3", "GT41", "PL+PL2"),
  G3 = c("GH13", "GH1O9", "", "CBM34+GH13+CBM48", "GT41", "GH16+CBM4+CBM54+CBM32"),
  stringsAsFactors = FALSE
)

步骤2:定义拆分补空函数

该函数负责拆分单列内容,并将结果补空到指定长度:

split_and_pad <- function(col, target_length) {
  # 按"+"拆分每个单元格,空单元格返回空向量
  split_list <- str_split(col, "\\+", simplify = FALSE) %>%
    map(~ if (.x == "") character(0) else .x)
  # 合并所有拆分后的元素
  expanded <- unlist(split_list)
  # 计算需要补充的空字符串数量并补全
  pad_length <- target_length - length(expanded)
  c(expanded, rep("", pad_length))
}

步骤3:计算最长列长度并生成结果

# 计算每列拆分后的元素总数
col_lengths <- map_dbl(df, function(col) {
  split_list <- str_split(col, "\\+", simplify = FALSE) %>%
    map(~ if (.x == "") character(0) else .x)
  length(unlist(split_list))
})

# 获取最大长度,作为所有列的目标行数
max_len <- max(col_lengths)

# 对每列应用拆分补空函数,合并为新DataFrame
df2 <- map_dfc(df, ~ split_and_pad(.x, max_len))

# 查看结果
print(df2, row.names = TRUE)

运行后得到的df2与你期望的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:42:57