首页 > 解决方案 > 在R中合并具有起始模式的文件

问题描述

我有一个包含许多 las 文件的目录。它看起来像下面的图片,但有数百个文件。

在此处输入图像描述

我想合并所有以相同名称开头的文件(直到“_”字符)

我设法开发了一个脚本,它合并了具有相同模式的所有文件

masterlist =list.files("//directory/",pattern="^name1")
listfiles <- paste("//directory/",masterlist, sep="")

#concatenate files into one file
con_files = c(listfiles)

lasread <- readLAS(con_files)
lasmerge <- rbind(lasread)
writeLAS(lasmerge, "//write/directory/name1.las")

但是,在这个脚本中,我硬编码了“name1”。我希望这是基于文件名的动态。

所以它应该是某种基于列表的循环,但我不知道如何创建具有动态模式的循环。

希望任何人都可以提供帮助。

谢谢

标签: rloopsmergerstudio

解决方案


只需创建一个模式列表并为每个模式运行代码。像这样

path <- "."
write_path <- "."
patterns <- list.files(path, pattern = ".*\\.las")
patterns <- strsplit(patterns, "_")
patterns <- unique(sapply(patterns, function(x) x[1]))

for(p in patterns) {
    masterlist <- list.files(path, pattern = paste0("^", p))
    listfiles <- paste(path, masterlist, sep = "")

    #concatenate files into one file
    con_files = c(listfiles)

    lasread <- readLAS(con_files)
    lasmerge <- rbind(lasread)
    writeLAS(lasmerge, file.path(write_path, paste0(p, ".las")))
}

推荐阅读