使用read_delim导入时序CSV时列名不匹配的问题
问题分析与解决方案
问题根源
- 分隔符指定错误:你的CSV文件实际分隔符是
;,而非带空格的;。从异常数据的列名能看出,表头是用;直接分隔的(Période;Production brute d'électricité nucléaire (en GWh)),用" ; "作为分隔符时,read_delim无法识别拆分规则,导致所有数据挤在一列,自然和你指定的列名不匹配。 - 列名不匹配:你在
cols()里写的列名Production.brute.d.électricité.nucléaire..en.GWh.是read.csv自动将空格转成点后的结果,但read_delim会保留原始列名的空格,二者不对应触发了警告。
修正后的代码
方法一:正确指定分隔符+匹配原始列名
library(readr) # cols里的列名要和CSV表头完全一致(保留空格) serie_elec <- read_delim( file = "C:/Users/Downloads/dataset_univarie.csv", delim = ";", # 修正为实际分隔符 escape_double = FALSE, col_types = cols( `Période` = col_date(format = "%Y-%m"), `Production brute d'électricité nucléaire (en GWh)` = col_number() ), trim_ws = TRUE # 可选,去除字段前后多余空格 ) # 删除不需要的行 serie_elec_clean <- serie_elec[-(504:515), ]
方法二:先导入再转换日期(更直观)
如果不想纠结列名写法,可以先导入数据,再单独处理日期列:
library(readr) library(dplyr) serie_elec <- read_delim( file = "C:/Users/Downloads/dataset_univarie.csv", delim = ";", escape_double = FALSE, trim_ws = TRUE ) %>% # 转换日期列 mutate(Période = as.Date(Période, format = "%Y-%m")) %>% # 删除指定行 slice(-(504:515))
验证结果
运行上述代码后,数据结构会和你预期的一致,第一列会被识别为日期类型,方便后续时序数据处理。
内容的提问来源于stack exchange,提问作者gerardlambert
相关产品推荐
相关产品推荐

