如何在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
相关产品推荐
相关产品推荐

