R 中的 POSXlt 和 filter()
POSXlt and filter() in R
我想对 data.frame 中的 date/time 列使用 POSIXlt,并使用 filter() 函数对其进行过滤。我的代码如下。
我相信我已经将日期数据正确地转换为数字,但仍然出现错误。
如何在不将 POSIXlt 更改为 POSIXct 的情况下进行整理?
require(dplyr)
x <- "2017-03-30"
y <- "2017-04-04"
name <- c("a","b","c","d")
weight <- c(2,3,1,5)
t <- c("2017-03-27 08:13:17", "2017-03-30 01:05:01", "2017-04-03 02:43:35", "2017-05-27 23:13:03")
z <- data.frame(name, weight, t)
z$t <- as.POSIXlt(z$t, tz="GMT", "%Y-%m-%d %H:%M:%S")
str(z)
z$t
x <- unclass(as.Date(x)) # integer
str(x)
y <- unclass(as.Date(y)) # integer
str(y)
d <- filter(z, between(unclass(as.Date(t)), x, y))
抛出的错误:
错误:列 t
是 date/time,必须存储为 POSIXct,而不是 POSIXlt。
dplyr
类 不处理 POSIXlt
列(内部是 list
对象),而它们可以处理 POSIXct
对象,这只是数字。
如果您打算坚持使用 dplyr
,则必须转换 t
列:
z$t<-as.POSIXct(z$t)
#now this works
d <- filter(z, between(as.Date(t), x, y))
如果您不想强制列,您可以使用标准基本运算符进行子集化:
z[as.Date(z$t)>=x & as.Date(z$t)<=y,]
我想对 data.frame 中的 date/time 列使用 POSIXlt,并使用 filter() 函数对其进行过滤。我的代码如下。
我相信我已经将日期数据正确地转换为数字,但仍然出现错误。
如何在不将 POSIXlt 更改为 POSIXct 的情况下进行整理?
require(dplyr)
x <- "2017-03-30"
y <- "2017-04-04"
name <- c("a","b","c","d")
weight <- c(2,3,1,5)
t <- c("2017-03-27 08:13:17", "2017-03-30 01:05:01", "2017-04-03 02:43:35", "2017-05-27 23:13:03")
z <- data.frame(name, weight, t)
z$t <- as.POSIXlt(z$t, tz="GMT", "%Y-%m-%d %H:%M:%S")
str(z)
z$t
x <- unclass(as.Date(x)) # integer
str(x)
y <- unclass(as.Date(y)) # integer
str(y)
d <- filter(z, between(unclass(as.Date(t)), x, y))
抛出的错误:
错误:列 t
是 date/time,必须存储为 POSIXct,而不是 POSIXlt。
dplyr
类 不处理 POSIXlt
列(内部是 list
对象),而它们可以处理 POSIXct
对象,这只是数字。
如果您打算坚持使用 dplyr
,则必须转换 t
列:
z$t<-as.POSIXct(z$t)
#now this works
d <- filter(z, between(as.Date(t), x, y))
如果您不想强制列,您可以使用标准基本运算符进行子集化:
z[as.Date(z$t)>=x & as.Date(z$t)<=y,]