R - 如何按文件名中的日期选择文件?

R - How to choose files by dates in file names?

很难为我的问题找到一个标题,因为它非常具体。

我的问题是:我有大约 9000 个不同时期收集的数据文件。文件名包含那个句点,我只想将那些文件加载​​到 R 中,其中至少包含 17/18 年的数据 collection。

我创建了一个测试列表来说明我的意思:

list = c("AT0ACH10000700100dymax.1-1-1993.31-12-2003",
         "AT0ILL10000700500dymax.1-1-1990.31-12-2011", 
         "AT0PIL10000700500dymax.1-1-1992.31-12-2011",
         "AT0SON10000700100dymax.1-1-1990.31-12-2011",
         "AT0STO10000700100dymax.1-1-1992.31-12-2006",  
         "AT0VOR10000700500dymax.1-1-1991.31-12-2011",
         "AT110020000700100dymax.1-1-1993.31-12-2008",
         "AT2HE190000700100dymax.1-1-1993.31-12-2000", 
         "AT2KA110000700500dymax.1-1-1991.31-12-2010", 
         "AT2KA410000700500dymax.1-1-1991.31-12-2011")

这些是文件名。现在我想提取所有包含至少 18 年的测量值的文件名。例如第一个文件应该被删除,因为periode太短了,第二个就可以了。所以我必须创建一些比较日期(仅年份)或类似 startyear + 18 的东西。

哦,文件名的长度不一样!这只是一个例子。

我不知道该怎么做。有人可以帮忙吗?

假设日期始终以“.”分隔,您可以使用字符串拆分。这是一个以天为单位获取时差的示例。

split_list = strsplit(list, split=".", fixed=TRUE)

from = unlist(lapply(split_list, "[[", 2))
to = unlist(lapply(split_list, "[[", 3))
from = as.POSIXct(from, format="%d-%m-%Y")
to = as.POSIXct(to, format="%d-%m-%Y")

difftime(to, from, "days")

要获得以年为单位的时差,您可以使用几种不同的解决方案。这里有两个解决方案:

R: How to calculate the difference in years between a date and a year

R get date difference in years (floating point)

具有一些假设但完全达到所需输出的替代解决方案。

year_to   <- as.integer(sub(".*([0-9]{4}$)",      "\1", list))
year_from <- as.integer(sub(".*-([0-9]{4})\..*", "\1", list))

# Assume all "from" dates start on Jan 01 and "to" dates end Dec 31
# Then the difference is 
diff <- year_to - year_from + 1
diff >= 18
FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE