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

如何将含分号分隔账单的DataFrame转换为长格式?

拆分分号分隔的账单列并转换为长格式数据

你的原始数据如下:

id <- c("673506", "624401", "674764")
bills <- c("sb 1181; ab 573; ab 2697", 
           "sb 1181; ab 573; ab 2697; ab 2448", 
           "sb 292; ab 497")

df <- data.frame(id, bills)

方法一:使用tidyverse包(推荐,代码简洁)

tidyverse里的separate_rows()函数可以直接将分号分隔的字符串拆分成多行,同时保留对应的id:

# 如果没安装tidyverse先安装
# install.packages("tidyverse")
library(tidyverse)

# 拆分并转换为长格式
long_df <- df %>% 
  separate_rows(bills, sep = "; ")

# 查看结果
long_df

运行后得到的目标结果:

id    bills
1 673506  sb 1181
2 673506   ab 573
3 673506  ab 2697
4 624401  sb 1181
5 624401   ab 573
6 624401  ab 2697
7 624401  ab 2448
8 674764   sb 292
9 674764   ab 497

方法二:使用Base R(无需额外安装包)

如果不想加载第三方包,可以用基础R的函数组合实现:

# 拆分bills列的字符串为列表
split_bills <- strsplit(df$bills, "; ")

# 构造长格式数据框:重复对应id,展开拆分后的账单
long_df_base <- data.frame(
  id = rep(df$id, sapply(split_bills, length)),
  bills = unlist(split_bills)
)

# 查看结果
long_df_base

这个方法的逻辑是先拆分每个账单字符串,再根据每个拆分结果的长度重复对应id,最后将拆分后的账单列表展开为列,结果和方法一完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:30:51