如何将文件夹中的不同csv文件(标题不完全相同)合并到R中的单个csv文件中
我的文件夹包含365个csv文件,这些文件表示每天的空气监测站点数据。我想将不同的csv文件合并到R中的单个csv文件中。问题是每个csv的站点数可能不同,因为随着时间的推移会添加新站点。但我有一个名为“total_sites”的csv文件它包含年底的所有站点。我想使用此“总站点”来补充每个文件中缺少的站点,以便每个csv文件中的列数相同,因此我可以使用如何将文件夹中的不同csv文件(标题不完全相同)合并到R中的单个csv文件中,r,merge,R,Merge,我的文件夹包含365个csv文件,这些文件表示每天的空气监测站点数据。我想将不同的csv文件合并到R中的单个csv文件中。问题是每个csv的站点数可能不同,因为随着时间的推移会添加新站点。但我有一个名为“total_sites”的csv文件它包含年底的所有站点。我想使用此“总站点”来补充每个文件中缺少的站点,以便每个csv文件中的列数相同,因此我可以使用rbind和do.call将所有文件合并在一起。但我不知道如何使用“total_sites”来补充每个文件中缺少的站点,从而使每个文件中的列数相
rbind
和do.call
将所有文件合并在一起。但我不知道如何使用“total_sites”来补充每个文件中缺少的站点,从而使每个文件中的列数相同
这些文件的示例如下:file20170101
# date A101 A102 A201 A202 A301
#1 0101 PM2.5 1 1 1 1 1
#2 0101 SO2 1 1 1 1 2
#3 0101 NO2 2 2 2 2 2
# date A101 A102 A201 A202 A301 A311 A312 A333
#1 0810 PM2.5 1 1 1 1 1 1 1 1
#2 0810 SO2 1 1 1 1 2 2 2 2
#3 0810 NO2 2 2 2 2 2 3 3 3
# date A101 A102 A201 A202 A301 A311 A312 A333 A334 A335
#1 1010 PM2.5 1 1 1 1 1 1 1 1 1 1
#2 1010 SO2 1 1 1 1 2 2 2 2 2 2
#3 1010 NO2 2 2 2 2 2 3 3 3 2 2
file20170810
# date A101 A102 A201 A202 A301
#1 0101 PM2.5 1 1 1 1 1
#2 0101 SO2 1 1 1 1 2
#3 0101 NO2 2 2 2 2 2
# date A101 A102 A201 A202 A301 A311 A312 A333
#1 0810 PM2.5 1 1 1 1 1 1 1 1
#2 0810 SO2 1 1 1 1 2 2 2 2
#3 0810 NO2 2 2 2 2 2 3 3 3
# date A101 A102 A201 A202 A301 A311 A312 A333 A334 A335
#1 1010 PM2.5 1 1 1 1 1 1 1 1 1 1
#2 1010 SO2 1 1 1 1 2 2 2 2 2 2
#3 1010 NO2 2 2 2 2 2 3 3 3 2 2
file20171010
# date A101 A102 A201 A202 A301
#1 0101 PM2.5 1 1 1 1 1
#2 0101 SO2 1 1 1 1 2
#3 0101 NO2 2 2 2 2 2
# date A101 A102 A201 A202 A301 A311 A312 A333
#1 0810 PM2.5 1 1 1 1 1 1 1 1
#2 0810 SO2 1 1 1 1 2 2 2 2
#3 0810 NO2 2 2 2 2 2 3 3 3
# date A101 A102 A201 A202 A301 A311 A312 A333 A334 A335
#1 1010 PM2.5 1 1 1 1 1 1 1 1 1 1
#2 1010 SO2 1 1 1 1 2 2 2 2 2 2
#3 1010 NO2 2 2 2 2 2 3 3 3 2 2
总站点数
# A101 A102 A201 A202 A301 A311 A312 A333 A334 A335 A400
我想要的结果是:
# date A101 A102 A201 A202 A301 A311 A312 A333 A334 A335 A400
#1 0101 PM2.5 1 1 1 1 1 NA NA NA NA NA NA
#2 0101 SO2 1 1 1 1 2 NA NA NA NA NA NA
#3 0101 NO2 2 2 2 2 2 NA NA NA NA NA NA
#4 0810 PM2.5 1 1 1 1 1 1 1 1 NA NA NA
#5 0810 SO2 1 1 1 1 2 2 2 2 NA NA NA
#6 0810 NO2 2 2 2 2 2 3 3 3 NA NA NA
#7 1010 PM2.5 1 1 1 1 1 1 1 1 1 1 NA
#8 1010 SO2 1 1 1 1 2 2 2 2 2 2 NA
#9 1010 NO2 2 2 2 2 2 3 3 3 2 2 NA
我们可以将它们加载到
列表中
并使用绑定行
。它将用NA
library(dplyr)
mget(ls(pattern = "^file\\d+$"))) %>%
bind_rows
我们可以将它们加载到
列表中
并使用绑定行
。它将用NA
library(dplyr)
mget(ls(pattern = "^file\\d+$"))) %>%
bind_rows
要使用data.table给出答案,请执行以下操作:
library(data.table)
#Detect all files in the folder:
filesList <- list.files("path/to/your/folder/",
pattern = ".csv$",
full.names = TRUE)
#Read in all files as data.table
tableList <- lapply(filesList, function(x) fread(x))
#Combine all data.tables in the list into one data.table and fill missing values
fullTable <- rbindlist(tableList, fill = TRUE)
要使用data.table给出答案,请执行以下操作:
library(data.table)
#Detect all files in the folder:
filesList <- list.files("path/to/your/folder/",
pattern = ".csv$",
full.names = TRUE)
#Read in all files as data.table
tableList <- lapply(filesList, function(x) fread(x))
#Combine all data.tables in the list into one data.table and fill missing values
fullTable <- rbindlist(tableList, fill = TRUE)