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

Я загружаю в R a 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

1 Ответ

3 голосов
/ 04 февраля 2020

Это глупо ... лучшее, что я мог придумать, это прочитать его как текст, а затем использовать 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 как строка, мы можем иметь дело с текстом «formatting»

# 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...