Удалить строки ниже порогового значения для всех текстовых файлов в каталоге - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть 800 текстовых файлов в формате X Y, где X и Y оба числа. Мне нужно (1) удалить строки данных, где x <91 для каждого текстового файла, затем (2) записать новый текстовый файл на основе исходного имени файла. </p>

Я успешно создал Tidyverse-код, который выполняет этот файл за файлом, что медленнее, чем просто вручную проходить через блокнот и удалять поврежденные строки данных. У меня возникают проблемы с циклом выполнения кода для всех файлов в каталоге.

Вот мини-код:

oldfile<- read_tsv(file='WD130887.txt',col_names=FALSE)
newfile<- filter(oldfile, X1>91)
write_tsv(newfile,path ='E:/Contract Data/Shorea2/edited/WD130887.txt')

и работает точно так, как должно. Он помещает мой новый отредактированный файл в новый каталог, чтобы ничего не перезаписывалось. Выход:

> write_tsv(newfile,path ='E:/Contract Data/Shorea2/edited/Shorea sp_WD130887.txt')
> oldfile<- read_tsv(file='Shorea sp_WD130887.txt',col_names=FALSE)
Parsed with column specification:
cols(
  X1 = col_double(),
  X2 = col_double()
)
> head(oldfile,n=5)
# A tibble: 5 x 2
     X1     X2
  <dbl>  <dbl>
1  89.0  1502.
2  89.1  5791.
3  90.1 20390.
4  91.1   760.
5  93.0 11748.
> newfile<- filter(oldfile, X1>91)
> head(newfile,n=5)
# A tibble: 5 x 2
     X1     X2
  <dbl>  <dbl>
1  91.1   760.
2  93.0 11748.
3  94.1  5183.
4  95.0  4021.
5  95.1   864.
> write_tsv(newfile,path ='E:/Contract Data/Shorea2/edited/Shorea sp_WD130887.txt')

Моя попытка сделать это для всего каталога привела меня сюда:

path <- "E:/Contract Data/Shorea2"
fs <-list.files(path, pattern=glob2rx("*.txt$")) #create list of my txt files
for (f in fs){
  fname <- file.path(path, f)
  df <- read_tsv(fname,col_names=FALSE) #open each txt file
  df <- filter(fname,X1>91) #apply tidyverse filter
  write_tsv(df, fname, row.names=FALSE) #write new txt file, I gave up on new directory
}

Но я получаю сообщение об ошибке:

Error in UseMethod("filter_") : 
  no applicable method for 'filter_' applied to an object of class "character"

То, что я считаю, означает, что код теперь смотрит на имена файлов, а не на значения строк. Помощь приветствуется! Я уверен, что это простая проблема, и я упускаю что-то очевидное.

...