当某些行包含逗号作为千位分隔符和“标志并且没有小数的行没有标志时如何在R中读取数据

Posted

技术标签:

【中文标题】当某些行包含逗号作为千位分隔符和“标志并且没有小数的行没有标志时如何在R中读取数据【英文标题】:How to read data in R when some rows contain commas as thousand separator and " flag and the rows without decimals don´t have flag 【发布时间】:2020-05-20 16:05:57 【问题描述】:

我在 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

【问题讨论】:

值中有逗号,我会尝试将 CSV 保存为制表符分隔的文件并尝试导入。 【参考方案1】:

这太棒了...我能想到的最好的办法就是将其作为文本阅读,然后使用 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)

【讨论】:

以上是关于当某些行包含逗号作为千位分隔符和“标志并且没有小数的行没有标志时如何在R中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

导入包含逗号、千位分隔符和尾随减号的 CSV 数据

使用数字和千位分隔符修复格式错误的字符串

将整列整数转换为字符串,在 Pandas 中使用逗号分隔千位

javascript 如何使用逗号作为千位分隔符在JavaScript中打印数字

使用 ToString() 格式化十进制值以将逗号作为千位分隔符,其中小数位数未知

如何使用逗号将数字转换为千位分隔符? [复制]