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

如何在R中读取含方括号的文件并转为带列表元素的数据框?

解决R中读取含列表格式CSV文件的问题

错误原因

你的CSV文件中,[G30, F00]这类字段内部包含逗号,而read.csv默认会把所有逗号识别为列分隔符,导致实际拆分出的列数超过表头定义的5列,因此抛出more columns than column names错误。

解决方案

方法一:Base R 手动处理

  1. 先读取所有行内容
lines <- readLines("example.txt")
  1. 用正则表达式分割每行,仅拆分不在方括号[]内的逗号
split_lines <- strsplit(lines, "(?<!\\[[^\\]]*),(?![^\\[]*\\])", perl = TRUE)
  1. 转换为数据框并设置表头
df <- as.data.frame(do.call(rbind, split_lines), stringsAsFactors = FALSE)
colnames(df) <- df[1, ]
df <- df[-1, ]
  1. 将含列表的列转换为列表格式(每个元素为字符向量)
# 定义处理函数:去除首尾方括号,拆分内部内容为向量
process_list_col <- function(x) {
  x_clean <- gsub("^\\[|\\]$", "", x)
  strsplit(x_clean, ",\\s*")
}

# 应用到目标列
df$ICD10_2023 <- process_list_col(df$ICD10_2023)
df$ICD10_2019 <- process_list_col(df$ICD10_2019)
df$ubk_coding_19 <- process_list_col(df$ubk_coding_19)

方法二:使用data.table(更简便)

data.table的fread函数能智能识别字段内部的逗号,自动正确拆分列:

  1. 安装并加载data.table(若未安装)
install.packages("data.table")
library(data.table)
  1. 读取文件
dt <- fread("example.txt", sep = ",", quote = "")
  1. 转换列表列
process_list_col <- function(x) {
  x_clean <- gsub("^\\[|\\]$", "", x)
  strsplit(x_clean, ",\\s*")
}

# 批量处理目标列
dt[, c("ICD10_2023", "ICD10_2019", "ubk_coding_19") := lapply(.SD, process_list_col), .SDcols = c("ICD10_2023", "ICD10_2019", "ubk_coding_19")]

处理完成后,df或dt中的目标列每个元素都是字符向量,例如df$ICD10_2023[[1]]会返回c("G30", "F00")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:08:31