如何通过grepl()过滤创建一个新的R矢量?

时间:2016-09-29 03:42:49

标签: r vector filter grepl

这是一个直截了当的问题,但我在下面遗漏了一些东西。

我在R

中有一个非常大的文件路径(即字符串)向量
vec = c("\dir\subdir\pathname1\file.txt", "\dir\subdir\pathname1\file.pdf",
                                           ...,  "\dir\subdir\pathname9\file.jpg")

我的想法是为每个"类型"创建一个data.table对象。例如,文件.txt.pdf等。因此,我需要通过过滤上述内容来为每个文件扩展名提供R向量。

我搜索具有特定扩展名的字符串的方式是grepl()

grepl(".txt$", vec)

现在,如何使用grepl()创建一个新的向量?终点应该是

txt_paths <- # single vector only with txt files
pdf_paths <- # single vector only with pdf files
jpg_paths <- # single vector only with jpg files
etc.

2 个答案:

答案 0 :(得分:1)

您可以使用grepl()生成的逻辑向量来索引vec。

txt_paths <- vec[grepl(".txt$", vec)]

答案 1 :(得分:0)

我们可以split vectorlist vector

lst <- split(vec, tools::file_ext(vec))
names(lst) <- paste0(names(lst), "_paths")

不建议在全局环境中使用单个对象,但如果我们更喜欢这种方式,请使用list2env

list2env(lst, envir = .GlobalEnv)

如果我们需要split文件名,

lst2 <- split(vec, tools::file_path_sans_ext(basename(vec)))

数据

vec <- c("\\dir\\subdir\\pathname1\\file.txt", 
        "\\dir\\subdir\\pathname1\\file.pdf",
        "\\dir\\subdir\\pathname9\\file.jpg")