POSXlt и фильтр () в R - PullRequest
       17

POSXlt и фильтр () в R

0 голосов
/ 02 июля 2019

Я хотел бы использовать POSIXlt для столбца даты / времени в моем data.frame и функцию 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 является датой / временем и должен храниться как POSIXct, а не POSIXlt.

1 Ответ

1 голос
/ 02 июля 2019

Классы 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,]
...