在 posixct 向量上使用 grep
Using grep on posixct vectors
我有多个日期时间列,我需要验证其中哪些列在时区 CEST
dat <- structure(c(1491199401.363, 1491201912.62, 1491205392.67, 1491205933.457, 1491206198.027, 1491206802.243), class = c("POSIXct", "POSIXt"), tzone = "")
dat
#[1] "2017-04-03 08:03:21 CEST" "2017-04-03 08:45:12 CEST" [3]
#"2017-04-03 09:43:12 CEST" "2017-04-03 09:52:13 CEST" [5] "2017-04-03
#09:56:38 CEST" "2017-04-03 10:06:42 CEST"
any(grep("CEST", dat))
#[1] FALSE
any(grep("CEST", "2017-04-03 08:03:21 CEST"))
#[1] TRUE
如果我 copy/paste 将元素放入 grep
函数中,我可以使此方法起作用,但如果我 运行 它在向量本身上,则不能。使用 as.character(dat)
也不起作用。我该怎么做?
我们可以用format
提取时区,用%in%
得到
"CEST" %in% format(dat, format="%Z")
#[1] TRUE
或者另一种选择是 unclass
转换为 POSIXlt
并提取 zone
"CEST" %in% unclass(as.POSIXlt(dat))$zone
#[1] TRUE
在 OP 是 grep
ping 的单个元素中,它是 character
class 而 dat
是 POSIXct
class .因此,它将能够使用 grep
找到子字符串。即使我们将 'dat' 转换为 character
,它也会丢失属性,即
as.character(dat)
#[1] "2017-04-03 08:03:21" "2017-04-03 08:45:12" "2017-04-03 09:43:12" "2017-04-03 09:52:13" "2017-04-03 09:56:38" "2017-04-03 10:06:42"
因此grep
将无法选择它
grepl("CEST", as.character(dat))
#[1] FALSE FALSE FALSE FALSE FALSE FALSE
我有多个日期时间列,我需要验证其中哪些列在时区 CEST
dat <- structure(c(1491199401.363, 1491201912.62, 1491205392.67, 1491205933.457, 1491206198.027, 1491206802.243), class = c("POSIXct", "POSIXt"), tzone = "")
dat
#[1] "2017-04-03 08:03:21 CEST" "2017-04-03 08:45:12 CEST" [3]
#"2017-04-03 09:43:12 CEST" "2017-04-03 09:52:13 CEST" [5] "2017-04-03
#09:56:38 CEST" "2017-04-03 10:06:42 CEST"
any(grep("CEST", dat))
#[1] FALSE
any(grep("CEST", "2017-04-03 08:03:21 CEST"))
#[1] TRUE
如果我 copy/paste 将元素放入 grep
函数中,我可以使此方法起作用,但如果我 运行 它在向量本身上,则不能。使用 as.character(dat)
也不起作用。我该怎么做?
我们可以用format
提取时区,用%in%
得到
"CEST" %in% format(dat, format="%Z")
#[1] TRUE
或者另一种选择是 unclass
转换为 POSIXlt
并提取 zone
"CEST" %in% unclass(as.POSIXlt(dat))$zone
#[1] TRUE
在 OP 是 grep
ping 的单个元素中,它是 character
class 而 dat
是 POSIXct
class .因此,它将能够使用 grep
找到子字符串。即使我们将 'dat' 转换为 character
,它也会丢失属性,即
as.character(dat)
#[1] "2017-04-03 08:03:21" "2017-04-03 08:45:12" "2017-04-03 09:43:12" "2017-04-03 09:52:13" "2017-04-03 09:56:38" "2017-04-03 10:06:42"
因此grep
将无法选择它
grepl("CEST", as.character(dat))
#[1] FALSE FALSE FALSE FALSE FALSE FALSE