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

如何在R中展开str_split结果并保留对应ID列关联

解决方案

在R中处理这类字符串拆分并保留关联ID的需求,最惯用的方式是借助tidyverse工具集里的separate_rows函数,一步就能完成拆分和行展开;也可以用base R结合stringr实现,以下是两种具体方法:

方法一:tidyverse 简洁实现(推荐)

tidyr::separate_rows专门用于将包含多值的列拆分成多行,同时自动保留其他列的对应关系,非常适合你的场景:

library(tidyverse)

# 原始数据
ID <- c(1, 1, 2, 3)
strings <- c("garbage", "trash", "trash \r\n garbage", "garbage \t\n trash \r junk")
test.frame <- data.frame(ID, strings)

# 拆分并展开行,用正则\\s+匹配任意空白字符(换行、制表符、空格等)
result <- test.frame %>%
  separate_rows(strings, sep = "\\s+")

# 查看结果
print(result)

运行后会直接得到你需要的格式:

ID strings
1  1 garbage
2  1   trash
3  2   trash
4  2 garbage
5  3 garbage
6  3   trash
7  3    junk

方法二:base R 实现

如果不想加载tidyverse,也可以用stringr::str_split结合base R的向量操作完成:

library(stringr)

# 原始数据
ID <- c(1, 1, 2, 3)
strings <- c("garbage", "trash", "trash \r\n garbage", "garbage \t\n trash \r junk")
test.frame <- data.frame(ID, strings)

# 拆分字符串为列表
split_list <- str_split(test.frame$strings, "\\s+")

# 生成与拆分后元素数量匹配的ID向量
expanded_ID <- rep(test.frame$ID, sapply(split_list, length))

# 扁平化拆分后的字符串列表
expanded_strings <- unlist(split_list)

# 组合成结果数据框
result_base <- data.frame(ID = expanded_ID, strings = expanded_strings)

print(result_base)

两种方法都能避免手动写循环,符合R语言的惯用编程风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:13:28