删除目录中所有txt文件的阈值以下的行

时间:2019-04-04 23:36:11

标签: r batch-processing delete-row

我有800个txt格式的txt文件,其中X和Y都是数字。我需要(1)删除数据行,其中每个txt文件的x <91,然后(2)根据原始文件名写入新的txt文件。

我成功制作了一个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"

我相信这意味着代码现在正在查看文件名而不是行的值。感谢帮助!我确信这是一个简单的问题,并且我遗漏了一些明显的东西。

0 个答案:

没有答案