【问题标题】:How to create a new R vector by filtering with grepl()?如何通过使用 grepl() 过滤来创建新的 R 向量?
【发布时间】:2017-02-07 05:35:12
【问题描述】:

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

我在 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.

【问题讨论】:

    标签: r vector filter grepl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我们可以将splitvector变成listvectors

      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")
      

      【讨论】:

      • 假设我想按文件名过滤,而不是仅文件扩展名,例如所有file1 路径到向量中,所有file2 路径到向量中,等等。如果没有file_ext(),这将如何实现?
      • @ShanZhengYang 更新帖子
      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2011-04-23
      • 2014-12-25
      • 2021-01-14
      • 2021-03-16
      • 2013-01-21
      相关资源
      最近更新 更多