【问题标题】:r - Use elements of a vector of characters as patterns for grepr - 使用字符向量的元素作为 grep 的模式
【发布时间】:2018-04-08 03:14:11
【问题描述】:

我有一个小时和分钟的向量:

Date=format( seq.POSIXt(as.POSIXct("2016-01-01 05:55:00"), as.POSIXct("2016-01-01 21:55:00"), by = "15 min"), "%H:%M:%S", tz="Europe/Rome")

我想将该向量的元素(即Date[4])用作 grep 模式的一部分:

grep("2016-01-.. Date[4]", df$first)

我实际上正在尝试做这样的事情:

grep("2016-01-.. 09:25:00", df$first)

我错过了什么?

【问题讨论】:

  • grep 没有对模式进行矢量化,因此您可以 (a) 使用循环(forsapply 等),(b) 在其上使用 vectorize创建矢量化版本,(c) 使用类似的函数,如 stringr::str_detect(),它在模式上进行了矢量化。在所有情况下,使用paste0 构建模式向量paste0("2016-01-.. ", Date)
  • 我对 r 很陌生,所以请多多包涵。使用 for 循环没有帮助:for(i in c(1:10)){ c<-grep("Date[i]", df$fist) } 我不明白为什么它不将Date[i] 视为普通字符串。
  • 当您将Date[i] 放在引号中时,字符串就是"Date[i]"。要使用存储在变量Date[i] 中的字符串,请勿使用引号:for(i in c(1:10)){ c<-grep(Date[i], df$fist) }。 (还有一个建议:不要使用c 作为变量名。因为c() 是最常见的函数,它可能会造成混淆。)

标签: r regex vector


【解决方案1】:

这是一个如何循环浏览列表的示例。将其扩展到您的 grep 语句应该很简单

for (i in 1:length(Date)){
  print(Date[i])
}

[1] "14:55:00"
[1] "15:10:00"
[1] "15:25:00"
[1] "15:40:00"
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多