如何通过使用 grepl() 进行过滤来创建新的 R 向量?
How to create a new R vector by filtering with grepl()?
这是一个简单的问题,但我遗漏了以下内容。
我在 R 中有一个非常大的文件路径向量(即字符串)
vec = c("\dir\subdir\pathname1\file.txt", "\dir\subdir\pathname1\file.pdf",
..., "\dir\subdir\pathname9\file.jpg")
我的想法是为每个 "type" 文件创建一个 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.
我们可以split
把vector
变成list
的vector
s
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")
您可以使用 grepl() 生成的逻辑向量来索引 vec。
txt_paths <- vec[grepl(".txt$", vec)]
这是一个简单的问题,但我遗漏了以下内容。
我在 R 中有一个非常大的文件路径向量(即字符串)
vec = c("\dir\subdir\pathname1\file.txt", "\dir\subdir\pathname1\file.pdf",
..., "\dir\subdir\pathname9\file.jpg")
我的想法是为每个 "type" 文件创建一个 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.
我们可以split
把vector
变成list
的vector
s
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")
您可以使用 grepl() 生成的逻辑向量来索引 vec。
txt_paths <- vec[grepl(".txt$", vec)]