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
很难为我的问题找到一个标题,因为它非常具体。
我的问题是:我有大约 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