如何在R语言中读取包含两种分隔符的CSV文件?
如何在R中导入混合逗号和分号分隔的CSV文件
嘿,这种混合使用逗号(外层列分隔)和分号(列内内容分隔)的CSV确实有点棘手,但咱们有几个简单的方案来处理,最终得到你需要的car_brand、car_model和total三列数据。
方法1:先按逗号读入,再拆分列
这是最直观的思路:先把文件按外层的逗号分隔读成两列,再把包含品牌和型号的那一列按分号拆分。
我们可以用基础R的read.csv,再配合tidyr包的separate函数来完成:
# 加载tidyr包(如果没安装先运行 install.packages("tidyr")) library(tidyr) # 按逗号分隔读入文件,得到初始的两列数据 df <- read.csv("your_file.csv", stringsAsFactors = FALSE) # 拆分第一列(列名是`car_brand; car_model`),按"; "拆分出品牌和型号 df <- separate( data = df, col = `car_brand; car_model`, # 列名含特殊字符,要用反引号包裹 into = c("car_brand", "car_model"), sep = "; " # 匹配文件里分号加空格的分隔格式 )
方法2:用readr包更灵活地读取
如果你习惯用tidyverse工具链,readr包的read_delim可以更灵活处理分隔符,还能自动去除单元格多余空格:
# 先安装并加载依赖包 install.packages(c("readr", "tidyr")) library(readr) library(tidyr) # 按逗号读入,trim_ws参数自动去除单元格前后空格 df <- read_delim("your_file.csv", delim = ",", trim_ws = TRUE) # 拆分列得到目标结构 df <- separate(df, col = `car_brand; car_model`, into = c("car_brand", "car_model"), sep = "; ")
方法3:用data.table快速处理大文件
如果你的CSV文件体积很大,data.table包的fread读取速度会快很多,后续拆分步骤和前面一致:
# 安装并加载依赖包 install.packages(c("data.table", "tidyr")) library(data.table) library(tidyr) # 快速读入文件 dt <- fread("your_file.csv") # 拆分列得到三列数据 dt <- separate(dt, col = `car_brand; car_model`, into = c("car_brand", "car_model"), sep = "; ")
完成后,你可以用print(df)或者head(df)查看结果,应该就能得到结构正确的三列数据啦!
内容的提问来源于stack exchange,提问作者josetribiani




