r - 当某些行包含逗号作为千位分隔符和“标志并且没有小数的行没有标志时如何读取R中的数据
问题描述
我在 R 中加载一个 csv(用逗号分隔),它有引号"包装每一行,其中包含一个带有小数值的列,并且特定值用双引号""包装,没有这个问题的行没有"包装
csv 文件如下所示:
YEAR,COUNTRY,VALUE_A,VALUE_B
2019,SPAIN, 2000, 300
"2019,SPAIN,""2000,54"",300"
"2014,SPAIN,""2003,223"",""125,057"""
2018,FRANCE,1900,280
解决方案
那真是太棒了...我能想到的最好的方法就是将其作为文本阅读,然后gsub
用于清除数千个标记和双引号。
# Read the csv as text, so we can run it through gsub
#
file_connection <- file("path_to_csv.csv")
text <- readLines(file_connection)
close(file_connection)
将 csv 的内容作为字符串读取后,我们可以处理文本“格式化”
# 1. Remove the comma as thousand mark
# There HAS to be a better way to do this regex but I couldn't remember
#
sanitized_mark <- gsub('(\\"\\"[0-9]+),([0-9]+\\"\\")', '\\1\\2', text)
# 2. Remove all double quotes
#
sanitized_quotes <- gsub('\\"', '', sanitized_mark)
# Paste it all together adding a newline character after each element
#
sanitized <- paste0(sanitized_quotes, collapse="\n")
text
可以使用参数读取生成的字符串,就好像它是 .csv 的内容一样
df <- read.csv(text=sanitized)
推荐阅读
- linux - windows 和 linux 内核如何处理死锁情况?
- android-studio - 我需要解决这个关于android studio的问题
- java - 未使用连接
- postgresql - 在带有时间戳列的 postgresql 中使用 select 命令时的混淆
- python - 标签在按钮之间放置空格 tkinter
- python - python sympy 如何简化我知道某个变量是奇整数的表达式
- excel - 如何以编程方式将代码导出和导入 Excel 工作表?
- amazon-web-services - 使用自定义推理脚本调用 sagemaker 端点
- python - 在 Python 中使用 alibi 包时,模块“pandas”没有属性“DataFrame”
- java - IntelliJ IDEA 无法识别 JavaFX 库