首页 > 解决方案 > 对具有相似模式的所有文件应用循环 - 对于 R 中的许多模式名称

问题描述

我有一组 .csv 文件,它们对应于不同年份的特定电台。我想创建一个模式来寻找从第 10 个字符到 .csv 的所有相似文件。到目前为止,我有以下内容:

files =list.files(pattern = ".csv")
files
[1] "data2011_AAST0100.csv"  "data2011_ADST0500.csv"  "data2011_AETR0100.csv" 
[2] "data2011_AIST0200.csv"  "data2011_AKST0200.csv"  "data2011_AMST0100.csv" 
[3] "data2012_AAST0100.csv"  "data2012_AETR0100.csv"  "data2012_AIST0200.csv" 
[4] "data2012_AMST0100.csv"  "data2012_ANST0100.csv"  "data2012_APST0300.csv" 
[5] "data2013_AAST0100.csv"  "data2013_AETR0100.csv"  "data2013_AIST0200.csv" 
[6] "data2013_AMST0100.csv"  "data2013_ANST0100.csv"  "data2013_APST0300.csv" 

但是,我想要这样的东西,它基本上在第 10 个字符之后寻找所有相似的模式名称。

files =list.files(pattern = "AAST")
files
[1] "data2011_AAST0100.csv" "data2012_AAST0100.csv" "data2013_AAST0100.csv" 

我的目标是对所有站点应用以下循环。

outfile = ""
for (i in 1:length(files)){
  tempData = read.csv(files[i], header = FALSE, sep="", na.strings=c(" "))
  colnames(tempData) = unlist(headers)
  df[is.na(tempData)] = NA
  outfile <- rbind(outfile, tempData)
}

标签: rloopspattern-matching

解决方案


您可以通过调用获取所有文件名,然后从包中过滤它们,而不是使用patternin 中的参数。list.fileslist.filesstr_extract_all()tidyverse

library(tidyverse)

# test <- list.files()
test <- c("data2011_AAST0100.csv", "data2011_ADST0500.csv", "data2011_AETR0100.csv", 
          "data2011_AIST0200.csv", "data2011_AKST0200.csv", "data2011_AMST0100.csv")

unique(unlist(str_extract_all(test, pattern = '(?<=\\_).{4}')))

[1] "AAST" "ADST" "AETR" "AIST" "AKST" "AMST"

这假定您要提取的名称始终是 4 个字母。


推荐阅读