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

如何使用R将长度不等的分号分隔字符串列拆分为多列

R拆分多分隔符字符串列为多列的实现方法

完全可以通过R实现该需求,以下提供两种常用的实现方案:

方案1:使用tidyverse系列包(推荐,代码简洁)

用到tidyr包的separate_wider_delim()函数,专门适配这种不等长分隔列拆分场景,代码如下:

# 加载包
library(tidyr)
library(dplyr)

# 构造示例数据
str <- as.character(c("M 12; M 13","M 24", NA, "C 12; C 50; C 78"))
no <- seq(1:4)
df <- data.frame(no,str)

# 拆分列
df_split <- df %>%
  separate_wider_delim(
    cols = str,
    delim = "; ", # 指定分隔符为分号加空格
    names_sep = "_", # 拆分后列名的分隔符,生成str_1、str_2、str_3
    too_few = "align_start", # 不足最大列数的行用NA填充,值靠左对齐
    too_many = "drop" # 超过预期列数的部分直接丢弃,也可以根据需求调整
  )

运行后输出结果如下:

# A tibble: 4 × 4
     no str_1 str_2 str_3
  <int> <chr> <chr> <chr>
1     1 M 12  M 13  <NA> 
2     2 M 24  <NA>  <NA> 
3     3 <NA>  <NA>  <NA> 
4     4 C 12  C 50  C 78

方案2:基础R实现(无需安装第三方包)

如果不想依赖第三方包,可以用基础R的字符串处理函数实现:

# 构造示例数据
str <- as.character(c("M 12; M 13","M 24", NA, "C 12; C 50; C 78"))
no <- seq(1:4)
df <- data.frame(no,str)

# 拆分字符串
split_list <- strsplit(df$str, "; ")
# 统一列表内每个元素的长度为最大长度3,不足的补NA
max_len <- max(sapply(split_list, length))
split_list_fill <- lapply(split_list, function(x) c(x, rep(NA, max_len - length(x))))
# 转成数据框合并到原数据
split_df <- do.call(rbind, split_list_fill)
colnames(split_df) <- paste0("str_", 1:max_len)
df_split <- cbind(df[, "no", drop=FALSE], split_df)

运行得到的结果和方案1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:15:04