合并CSV文件时如何有效处理列名不匹配?

时间:2019-05-23 13:54:52

标签: r

我正在尝试将所有csv文件合并到一个文件夹中,并且某些摘录的版本略有不同。无论出于何种原因,似乎已经对列名进行了细微的更改。匹配和合并这些列中的数据的最佳方法是什么?

在检查了以下答案后,我尝试使用以下代码:How to import multiple .csv files at once?

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

生成的tbl的列比任何原始文件都多,罪魁祸首是在合并csvs之后,我在tbl中具有如下名称的列:

example columns

我前面有很多这样的合并,并指出列名的差异并不总是以相同的形式表现出来(即有时问题是“ /”或其他字符)。

我是否可以期望必须手动进行这些更正,或者是否可以实现一些代码以匹配列?考虑到“电子邮件地址类型2”仅应与“电子邮件地址类型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"))) 

收到的错误消息说:

  

错误:$运算符对原子向量无效

在此先感谢您提供的任何帮助!

0 个答案:

没有答案