一次加载多个csv文件,并保持列名不变

时间:2019-06-13 19:32:28

标签: r csv

我有一个包含不同csv文件的文件夹。下面是显示csv文件的图片。我想一次导入所有这些,并一次性命名。另外,我想保持列名不变。

enter image description here

Here is what I tried:
#Loading the data
filenames <- list.files(path="C:/Users/Juste/Desktop/Customs Data",
                    pattern="Imports 201+.*csv")

filelist <- lapply(filenames, read.csv)

#assigning names to data.frames
names(filelist) <- paste0("Imports_201",2:length(filelist))

#note the invisible function keeps lapply from spitting out the data.frames to the console
invisible(lapply(names(filelist), function(x) assign(x,filelist[[x]],envir=.GlobalEnv)))

当我尝试此操作时,它仅导入前五个csv文件,而忽略了“ Imports 2017_anonymized”。列名称也会更改格式。例如,“最佳国家”列变为“最佳国家”。如何导入所有csv文件并保持列名不变?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用map()软件包中的purrrread_csv()软件包中的readr(请注意,它是用下划线写的)。这样,您的列名就不会更改。

library(purrr)
library(readr)
map(filenames, read_csv)

或者如果您想自动连接数据框,请使用

map_df(filenames, read_csv)

答案 1 :(得分:0)

对不起,我无法添加评论,因为我目前在这里没有足够的声誉。但是,我认为您的正则表达式可能对导入有些影响。尝试pattern = "^Imports\\s+201\\d_anonymised\\.csv$"

关于列名中的“。”,我相信默认情况下,R的核心数据导入命令会将这些添加在有空格的地方。否则,每次要引用名称中带有空格的列时,都需要使用反引号。您可以尝试在check.names = F函数中设置read.csv(),因为这就是在数据导入时调用make.names()来清理列名的原因。键入?make.names以查看其作用。