在读入和合并多文件时添加一个变量
Add a variable while reading in and merging multi-files
我想合并几个文件。这些是我的路径:
allpaths=c("c:\data\country_GM2\GM_2020_8.csv","c:\data\country_GM2\GM_2020_9.csv","c:\data\country_GM2\GM_2020_10.csv","c:\data\country_GM2\GM_2020_11.csv","c:\data\country_GM2\GM_2020_12.csv")
我写了这样一个函数:
merge_1 = function(filepath) {
datalist= lapply(filepath,
function(x){read.csv(file = x,
header = TRUE,
stringsAsFactors = FALSE)})
Reduce(function(x,y){rbind.fill(x,y)},datalist)
}
data <-merge_1(allpaths)
不过,我希望,在读取每个文件的同时,我可以从文件路径中同时添加一个带有年份和月份的变量。
例如,对于从“GM_2020_12.csv”读取的那些行,添加值为“2020.12.”的变量。
如果能提供一些提示,我将不胜感激。
到目前为止,我只能想到,tidyverse包中的“mutate”可能是解决方案,但我还没有找到将其放入我的函数中的正确方法。
非常感谢!
您可以在使用正则表达式读取提取年份和月份值的数据时添加新列。
将函数更改为:
merge_1 = function(filepath) {
datalist= lapply(filepath,function(x) {
transform(read.csv(file = x,header = TRUE, stringsAsFactors = FALSE),
year_month = sub('.*?(\d+)_(\d+)\.csv$', '\1.\2', x))
})
Reduce(function(x,y){rbind.fill(x,y)},datalist)
}
data <-merge_1(allpaths)
其中 sub
returns 文件名中的年份和月份值。
allpaths=c("C:\data\country_GM2\GM_2020_8.csv",
"C:\data\country_GM2\GM_2020_9.csv")
sub('.*?(\d+)_(\d+)\.csv$', '\1.\2', allpaths)
#[1] "2020.8" "2020.9"
我想合并几个文件。这些是我的路径:
allpaths=c("c:\data\country_GM2\GM_2020_8.csv","c:\data\country_GM2\GM_2020_9.csv","c:\data\country_GM2\GM_2020_10.csv","c:\data\country_GM2\GM_2020_11.csv","c:\data\country_GM2\GM_2020_12.csv")
我写了这样一个函数:
merge_1 = function(filepath) {
datalist= lapply(filepath,
function(x){read.csv(file = x,
header = TRUE,
stringsAsFactors = FALSE)})
Reduce(function(x,y){rbind.fill(x,y)},datalist)
}
data <-merge_1(allpaths)
不过,我希望,在读取每个文件的同时,我可以从文件路径中同时添加一个带有年份和月份的变量。
例如,对于从“GM_2020_12.csv”读取的那些行,添加值为“2020.12.”的变量。
如果能提供一些提示,我将不胜感激。 到目前为止,我只能想到,tidyverse包中的“mutate”可能是解决方案,但我还没有找到将其放入我的函数中的正确方法。
非常感谢!
您可以在使用正则表达式读取提取年份和月份值的数据时添加新列。
将函数更改为:
merge_1 = function(filepath) {
datalist= lapply(filepath,function(x) {
transform(read.csv(file = x,header = TRUE, stringsAsFactors = FALSE),
year_month = sub('.*?(\d+)_(\d+)\.csv$', '\1.\2', x))
})
Reduce(function(x,y){rbind.fill(x,y)},datalist)
}
data <-merge_1(allpaths)
其中 sub
returns 文件名中的年份和月份值。
allpaths=c("C:\data\country_GM2\GM_2020_8.csv",
"C:\data\country_GM2\GM_2020_9.csv")
sub('.*?(\d+)_(\d+)\.csv$', '\1.\2', allpaths)
#[1] "2020.8" "2020.9"