[R!从列表中删除从特定字母开始的元素

时间:2011-07-21 08:13:51

标签: list r

我创建了一个文件列表:

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

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

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

3 个答案:

答案 0 :(得分:2)

使用正则表达式进行过滤。

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

(您也可以在grepl中交换str_detect stringr。)

答案 1 :(得分:1)

假设你的列表是一维的,那么这样的事情应该有效:

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

答案 2 :(得分:0)

你实际上可以创建一个(相当复杂的)PERL正则表达式模式,该模式匹配以“_OBC.asc”结尾的所有名称,但不要以“NOWY”开头:"^(?!NOWY).*_OBC\\.asc$"

不幸的是dir无法识别PERL语法。但你可以像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”。