2011-07-21 63 views
0

我创建的文件列表:R!删除列表从特定字母开头的元素

folder_GLDAS=dir(foldery[numeryfolderow],pattern="_OBC.asc",recursive=F,full.names=T) 

不幸的是,一个额外的对象,我想删除(文件名以"NOWY" - NOWYevirainf_OBC.asc开头)。

如何在列表中找到该元素的索引以通过键入以将其删除: folder_GLDAS<=folder_GLDAS[-to_remove] ??

回答

1

假设你的列表是一维的,这样的事情应该工作:

*folder_GLDAS<-*folder_GLDAS[substr(*folder_GLDAS,1,4)!='NOWY']

2

过滤器使用正则表达式。

folder_GLDAS <- folder_GLDAS[!grepl("^NOWY", folder_GLDAS)] 

(你也可以换greplstr_detectstringr

0

实际上,你可以做出为此在“_OBC.asc”但是,不要所有的名字相匹配的(相当复杂的)PERL正则表达式模式从“NOWY”开始:"^(?!NOWY).*_OBC\\.asc$"

不幸的是,PERL语法不能被dir识别。但是你可以用grep这样做:

folder_GLDAS <- dir(foldery[numeryfolderow],recursive=F,full.names=T) 
folder_GLDAS <- grep(folder_GLDAS, pattern="^(?!NOWY).*_OBC\\.asc$", perl=T, value=T) 

还要注意的是,“”在“_OBC.asc”中需要被转义 - 否则你会匹配例如“_OBCXasc”)。