按其在R中的时间内容过滤字符串

时间:2019-02-08 19:45:10

标签: r

假设我有一个字符串向量(实际上是文件名):

x<-c("abcd20090809.txt", "bc20100209.txt", "bcd19971109.txt",
     "abcef20120802.txt", "efg20151109.txt","xyz19860102.txt")

x中的数字表示时间,格式为yyyymmdd。我想要的是为x之前的文件时间过滤2000。例如输出为:

> xx
[1] "bcd19971109.txt" "xyz19860102.txt"

2 个答案:

答案 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创建