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

如何在R中将单列按分隔符拆分为数量不等的多列

R语言拆分不等长逗号分隔字符串为多列的实现方法

tidyverse 方案(代码简洁,推荐使用)

需先安装加载tidyr包(版本≥1.2.0),如果未安装可先执行install.packages("tidyr"):

library(tidyr)

result <- DF %>%
  separate_wider_delim(
    Col1, 
    delim = ",", 
    names_sep = "", 
    too_few = "align_start",
    values_fill = ""
  )

参数说明:

  • too_few = "align_start" 表示长度不足的行从左到右填充,末尾空缺
  • values_fill = "" 表示空缺位置填充空字符串,和示例输出格式一致
  • names_sep = "" 会自动生成Col1、Col2格式的列名,符合需求

如果使用旧版本tidyr,可采用拆分后展开的方案:

library(tidyr)
library(dplyr)

result <- DF %>%
  mutate(col_list = strsplit(Col1, ",")) %>%
  unnest_wider(col_list, names_sep = "") %>%
  rename_with(~ gsub("col_list", "Col", .x)) %>%
  select(-Col1) %>% # 若需保留原字符串列可删除此行
  mutate(across(everything(), ~ replace(.x, is.na(.x), "")))

base R 方案(无需额外安装依赖包)

# 拆分所有字符串为列表
split_vec <- strsplit(DF$Col1, ",")
# 计算最大元素长度,统一所有行的长度
max_len <- max(lengths(split_vec))
# 空缺位置补空字符串
split_filled <- lapply(split_vec, function(x) c(x, rep("", max_len - length(x))))
# 转换为数据框,保留原有行名
result <- data.frame(
  do.call(rbind, split_filled),
  row.names = rownames(DF),
  check.names = FALSE
)
# 设置列名
colnames(result) <- paste0("Col", 1:max_len)

两种方案执行后得到的result均和预期输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:45:04