我有一个包含数千个CSV文件的目录,所幸遵循严格的命名约定。我正在尝试编写一个将所有以相同的后7位数字结尾的文件分组到单独的数据帧中的函数。
我有一个7位数字模式的向量(u)要匹配:
v <- list.files(wd, full.names = FALSE)
u <- unique(substr(v, 9, 15))
现在,我需要对列表v中的每个文件运行向量u的每个元素,并将v中的所有匹配文件组合为单个u值的数据数据帧。
我尝试了一些没有成功的事情:
#only matches first in list
files <- list.files(pattern=u)
#makes a list of vectors with the same contents
lapply(v, function(x) list.files(pattern=u))
#nope
data <- data.frame()
for (i in 1:length(u)) {
data <- rbind(data, read.csv(v[files]))
}
在正确的方向上轻推或推推将不胜感激。
谢谢!
答案 0 :(得分:2)
嵌套调用lapply
应该可以做到。对lapply
的第一次调用将遍历唯一模式(v
)。对于每个模式,第二个lapply
循环遍历所有匹配的文件(list.files(pattern=pattern)
),读取(read.table
)中的文件,然后将它们绑定在一起成为单个data.frame与{{1 }}从bind_rows
包中(您也可以使用dplyr
,但我发现rbind
更简单)并将其返回给外部bind_rows
。
结果应为lapply
中的list
,每个都包含与7位数字模式匹配的所有data.frames
文件的合并内容。
.csv