R Studio读取含GPS值的气候CSV文件数据全挤在第一列求助
问题根因
- 传入
sep=';'读取时全表挤在第一列,是因为这份法语区导出的CSV实际字段分隔符为逗号,文件内没有分号,R会直接把整行识别为单个字段。 - 传入
sep=','读取失败,是因为文件存在导出bug:第一列经度的所有数值均以逗号作为小数分隔符,但导出时漏加了包裹字段的双引号,R会把经度值里的小数逗号误判为字段分隔符,导致全表列错位、解析失败。 - 这份文件所有数值统一使用逗号作为小数标记,和常规CSV用点做小数点的规则不兼容,也是读取异常的原因。
修复代码
直接用基础R函数即可完成读取,无需额外安装第三方包:
# 按行读取原始文件文本,不做分隔符解析,若读入后法语字符乱码就把encoding参数改为"latin1" all_lines <- readLines("historique_rouyn_2005_03.csv", encoding = "UTF-8") # 定位列名所在行号,若文件开头无多余元数据说明,返回值为1 header_row <- grep("Longitude \\(x\\)", all_lines)[1] # 修复导出bug:将每行开头经度值里的小数逗号替换为点,避免被误判为字段分隔符 fixed_content <- gsub("^(-?\\d+),(\\d+)", "\\1.\\2", all_lines[header_row:length(all_lines)]) # 读取修复后的文本,指定对应解析规则 rouyn2005 <- read.csv( text = fixed_content, header = TRUE, sep = ",", dec = ",", quote = "\"", check.names = FALSE )
验证方式
读取完成后执行ncol(rouyn2005),返回值为31即和你提供的字段总数匹配;再执行head(rouyn2005)查看经纬度、温度列,能正常显示数值格式即为读取成功。
后续避坑
如果还要下载同站点的历史气候数据,导出时优先选择英语版本CSV,英语版本默认用点做小数分隔符、逗号做字段分隔符,不存在首列漏引号的导出bug,直接用标准read.csv()即可正常读取。
内容的提问来源于stack exchange,提问作者Christophe
相关产品推荐
相关产品推荐

