我有一个包含不同csv文件的文件夹。下面是显示csv文件的图片。我想一次导入所有这些,并一次性命名。另外,我想保持列名不变。
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文件并保持列名不变?
答案 0 :(得分:0)
您可以尝试使用map()
软件包中的purrr
和read_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
以查看其作用。