假设我有一个字符串向量(实际上是文件名):
x<-c("abcd20090809.txt", "bc20100209.txt", "bcd19971109.txt",
"abcef20120802.txt", "efg20151109.txt","xyz19860102.txt")
x
中的数字表示时间,格式为yyyymmdd
。我想要的是为x
之前的文件时间过滤2000
。例如输出为:
> xx
[1] "bcd19971109.txt" "xyz19860102.txt"
答案 0 :(得分:1)
您可以使用grep
grep(pattern = "^[a-z]+1", x, value = TRUE)
# [1] "bcd19971109.txt" "xyz19860102.txt"
修改
如果我们想按“ 2010年之前”的条件进行子集化,
thres <- as.Date("2010-01-01")
idx <- as.Date(unlist(regmatches(x, gregexpr("\\d+", text = x), )), format = "%Y%m%d") < thres
x[idx]
# [1] "abcd20090809.txt" "bcd19971109.txt" "xyz19860102.txt"
答案 1 :(得分:1)
在这里,我使用substring
提取年份,然后根据您的条件(即<2000)对其进行检查,并提取x
的元素TRUE
。
x<-c("abcd20090809.txt", "bc20100209.txt", "bcd19971109.txt",
"abcef20120802.txt", "efg20151109.txt","xyz19860102.txt")
x[as.numeric(substring(x,nchar(x)-11,nchar(x)-8))<2000]
#> [1] "bcd19971109.txt" "xyz19860102.txt"
由reprex package(v0.2.1)于2019-02-08创建