Применить цикл ко всем файлам с похожим шаблоном для многих имен шаблонов в R - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть набор файлов .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)
}

1 Ответ

0 голосов
/ 25 февраля 2019

Вместо использования аргумента pattern в list.files вы можете получить все имена файлов, вызвав list.files, а затем отфильтровать их с помощью str_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 букв.

...