Как читать данные в R, когда некоторые строки содержат запятые в качестве разделителя тысяч и флага, а строки без десятичных знаков не имеют флага

Я загружаю в R csv (разделенный запятой), в котором есть кавычки ", заключающие каждую строку, содержащую столбец со значением с десятичными знаками, а конкретное значение заключено в двойные кавычки " "< / strong>, строки без этой проблемы не имеют упаковки "

файл 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


person edperalt    schedule 04.02.2020    source источник
comment
С запятыми в значениях я бы попытался сохранить CSV как файл с разделителями табуляции и попытаться импортировать его.   -  person TTS    schedule 04.02.2020


Ответы (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")

Результирующую строку можно прочитать, как если бы она была содержимым файла .csv, используя аргумент text.

df <- read.csv(text=sanitized)
person dario    schedule 04.02.2020