【问题标题】:list files based on characters in a dataframe (partial name matching)根据数据框中的字符列出文件(部分名称匹配)
【发布时间】:2020-07-16 11:20:00
【问题描述】:

我有一个包含多个文件的目录。文件名格式相同,如下所示:

mar_1999_cloglog.asc
mar_2000_cloglog.asc
mar_2001_cloglog.asc

等等

文件名的第一部分指的是月份(在本例中为三月),第二部分指的是年份(1999、2000 等)。

我还有一个单列数据框,每行包含一年:

'data.frame':   11 obs. of  1 variable:
 $ yrlst: int  1998 2001 2002 2003 2004 2006 2009 2010 2011 2013

我正在尝试列出在数据框中找到年份的目录中的文件。我在目录中创建了一个文件列表,然后将dataframe转换为向量(dfvector),然后使用grep进行模式匹配,但是结果列表为空:

dirlst <- list.files(paste0("filepath", pattern = "cloglog", recursive = FALSE, full.names = TRUE) 
test <- grep(list.files(dirlst), pattern = dfvector, value = TRUE)

我尝试了其他几种变体,但都没有成功。有人能帮忙吗?我确信这很容易,但我似乎无法理解它。

提前致谢。

【问题讨论】:

  • 您的dirlst 已经包含list.files,并且在grep 中您再次应用list.files(dirlst);这是故意的吗?
  • @Bas 好点 - 我不需要 list.files 两次...我不知道我为什么这样做

标签: r subset


【解决方案1】:

还有更好的方法。

list_dir <- c("1900.asc", "1901.asc", "1902.asc", "1903.asc", "1904.asc","1905.asc","1906.asc")
years <- c("1901","1904")
select_files <- list_dir[grepl(paste(years, collapse= "|"), list_dir)]

【讨论】:

  • 太棒了!非常感谢:)
  • 乐于助人。编码愉快。
【解决方案2】:

这个涉及一个小循环。

我为这个问题创建了一个示例数据集。
a 与 list.files(filepath, patter=".asc")
b 相同> 与年份列表的数据框相同。

a <- c("1900.asc", "1901.asc", "1902.asc", "1903.asc", "1904.asc","1905.asc","1906.asc")
b <- c("1901","1904")    
x <- vector()
for(i in 1:length(b)){
      
y <- a[grepl(b[i], a)]
x <- union(x, y)
  
}
x

以字符向量的形式获得所需的输出。

【讨论】:

    猜你喜欢
    • 2018-02-03
    • 2021-09-08
    • 2021-04-17
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多