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

如何在R语言中按分号拆分列字符串并分配对应行值

解决方案

针对大规模数据的字符串拆分展开需求,推荐以下两种高效方案:

方法1:使用data.table(优先推荐,大数据处理速度快)

data.table具备出色的内存效率和运算速度,非常适合处理大规模数据集:

# 加载包
library(data.table)

# 定义原始数据(为第二列命名为count,方便后续操作)
df <- data.frame(day = c("Monday", "Tuesday; Wednesday", "Thursday"),
                 count = c(2, 3, 5))

# 转换为data.table格式并执行拆分展开
setDT(df)
df_goal <- df[, .(value = unlist(strsplit(day, "; "))), by = count]

# 调整列顺序以匹配目标格式(可选)
setcolorder(df_goal, c("value", "count"))

核心逻辑:通过strsplit按; 拆分字符串,unlist将拆分后的列表转为向量,再以count为分组依据,为每个拆分后的字符串生成对应行。

方法2:使用tidyr(tidyverse生态,语法简洁)

如果习惯tidyverse的语法风格,tidyr的向量化操作也能高效处理该需求:

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

# 定义原始数据
df <- data.frame(day = c("Monday", "Tuesday; Wednesday", "Thursday"),
                 count = c(2, 3, 5))

# 执行拆分展开并调整列顺序
df_goal <- df %>%
  mutate(value = str_split(day, "; ")) %>%
  unnest_longer(value) %>%
  select(value, count)

核心逻辑:str_split将每个字符串拆分为列表列,unnest_longer把列表列展开为多行,最终通过select调整列顺序。

两种方法得到的结果均与目标数据框一致:

> df_goal
        value count
1      Monday     2
2     Tuesday     3
3   Wednesday     3
4    Thursday     5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:45:40