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

如何在R中将指定格式字符串拆分转换为含id和food_type列的数据框?

解决R字符串转两列表格的问题

我来帮你搞定这个字符串转表格的需求!你手里的这个字符串格式其实很有规律,只要一步步清理分割就能得到想要的结果,我给你两种常用的实现方式:

方法一:用tidyverse工具包(简洁直观)

如果平时习惯用tidyverse系列包(stringr+tidyr),可以用这套代码,步骤清晰易读:

library(tidyverse)

# 你的原始字符串
tmp <- "(12,'chinese'),(13,'italian'),(14,'spanish')"

# 逐步转换为数据框
df <- tibble(raw_text = tmp) %>%
  # 去掉字符串首尾的括号
  mutate(raw_text = str_remove_all(raw_text, "^\\(|\\)$")) %>%
  # 按"),("分割,把每个条目拆成单独一行
  separate_rows(raw_text, sep = "\\),\\(") %>%
  # 把每个条目分割成id和food_type两列,同时自动把id转为数值型
  separate(raw_text, into = c("id", "food_type"), sep = ",(?=')", convert = TRUE) %>%
  # 去掉food_type字段的单引号
  mutate(food_type = str_remove_all(food_type, "'"))

# 查看结果
print(df)

运行后输出就是你要的表格:

# A tibble: 3 × 2
     id food_type
  <int> <chr>    
1    12 chinese  
2    13 italian  
3    14 spanish  

方法二:基础R实现(无需额外安装包)

如果不想加载第三方包,用基础R的函数也能完成:

# 你的原始字符串
tmp <- "(12,'chinese'),(13,'italian'),(14,'spanish')"

# 第一步:清理首尾括号,分割成单个条目
entries <- strsplit(gsub("^\\(|\\)$", "", tmp), "\\),\\(")[[1]]

# 第二步:把每个条目拆分成id和food_type
split_data <- lapply(entries, function(x) {
  strsplit(x, ",(?=')", perl = TRUE)[[1]]
})

# 第三步:转换为数据框并整理格式
df <- as.data.frame(do.call(rbind, split_data), stringsAsFactors = FALSE)
colnames(df) <- c("id", "food_type")
df$id <- as.integer(df$id)
df$food_type <- gsub("'", "", df$food_type)

# 查看结果
print(df)

输出结果同样符合要求:

id food_type
1 12   chinese
2 13   italian
3 14   spanish

关键细节解释

你之前可能卡在分割后的格式转换上,这里的核心是用正则表达式",(?=')"来分割——它只会匹配后面跟着单引号的逗号,这样就不会把food_type里的内容(如果有逗号的话)误分割,保证分割的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:20