Как эффективно обрабатывать несоответствия имен столбцов при объединении CSV-файлов? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь объединить все CSV-файлы в папке, и у меня есть несколько разные версии некоторых выдержек. По какой-то причине тонкие изменения в именах столбцов, кажется, были сделаны. Каков наилучший способ взять на себя задачу сопоставления и объединения данных из этих столбцов?

Я попытался использовать приведенный ниже код, после изучения этого ответа: Как импортировать несколько файлов .csv одновременно?

tbl <-
  list.files(path = "//folder/anotherfolder/",
             pattern = "*.csv", 
             full.names = T) %>% 
  map_df(~read_csv(., col_types = cols(.default = "c"))) 

Получившийся tbl имеет гораздо больше столбцов, чем любой из исходных файлов, виновником является то, что у меня есть столбцы с именами, как показано в tbl после слияния csvs:

example columns

У меня впереди многие из этих слияний, и я заметил, что различия в именах столбцов не всегда проявляются в одной и той же форме (т. Е. Иногда проблема заключается в «/» или каком-либо другом символе).

Могу ли я ожидать внесения этих исправлений вручную или есть способ реализовать некоторый код для сопоставления столбцов? Я думаю, что нечеткое сопоставление будет трудным, учитывая тот факт, что «Адрес электронной почты типа 2» следует объединять только с «Email.Address.Type.2», а не с «адресом электронной почты-2» и т. Д.

Есть ли способ изменить код, чтобы убрать все пробелы или знаки пунктуации из заголовков столбцов? Это решило бы мою проблему, потому что, похоже, единственными проблемами являются символы, отличные от букв и цифр.

Моя попытка удалить специальные символы до сих пор не удалась с кодом ниже. Моя идея заключалась в том, чтобы попытаться удалить символы в строках имен столбцов в операторе map_df.

tbl <-
  list.files(path = "//folder/anotherfolder/",
             pattern = "*.csv", 
             full.names = T) %>% 
  map_df(~read_csv(., col_names = gsub("[^[:alnum:] ]", "", .),trim_ws=TRUE, 
  col_types = cols(.default = "c"))) 

Еще одна попытка ниже, и я получаю сообщение об ошибке

tbl <-
  list.files(path = "//folder/anotherfolder/",
             pattern = "*.csv", 
             full.names = T) %>% 
  map_df(~read_csv(., {colnames<-c(gsub("[^[:alnum:] ]", "", x=names(.)))}, 
col_names = colnames,
                    col_types = cols(.default = "c"))) 

Полученное сообщение об ошибке гласит:

Ошибка: оператор $ недопустим для атомарных векторов

Заранее благодарим за любую помощь, которую вы можете оказать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...