r - 删除目录中所有 txt 文件低于阈值的行
问题描述
我有 800 个 XY 格式的 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"
我相信这意味着代码现在正在查看文件名而不是行的值。帮助表示赞赏!我确信这是一个简单的问题,我错过了一些明显的东西。
解决方案
推荐阅读
- android - 在构建版本中找不到数据类 Kotlin 的序列化程序
- javascript - 用于 webdriverio 的 css 选择器,用于从表中捕获数据
- slider - 商店用品滑块横幅未完全显示
- c# - 过滤集合匹配字段与内存中的另一个列表
- python - Python Sqlite3 - Null 作为元组中的非第一个元素不起作用
- .net - 如何在 PowerShell 5 中定义和使用自定义属性?
- oop - 模板方法设计模式 - 如何保存信息并将其提供给下一步
- python - Django psycopg2.errors.StringDataRightTruncation:对于类型字符变化的值太长(200)
- c# - 在整个应用程序中都有可用的位图
- matplotlib - matplotlib 中的 X 刻度轴