首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的POSXlt和filter()

R中的POSXlt和filter()
EN

Stack Overflow用户
提问于 2019-07-02 18:23:48
回答 1查看 260关注 0票数 0

我想对data.frame中的date/time列使用POSIXlt,并使用filter()函数对其进行过滤。我的代码如下。

我相信我已经正确地将日期数据转换为数字,但我仍然得到一个错误。

如何在不将POSIXlt更改为POSIXct的情况下对其进行排序?

代码语言:javascript
运行
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 18:39:18

dplyr类不处理POSIXlt列(在内部是list对象),而它们可以处理POSIXct对象,这些对象只是数字。

如果您打算继续使用dplyr,则必须转换t列:

代码语言:javascript
运行
复制
z$t<-as.POSIXct(z$t)
#now this works
d <- filter(z, between(as.Date(t), x, y))

如果不想强制列,可以使用标准基本运算符进行子集:

代码语言:javascript
运行
复制
z[as.Date(z$t)>=x & as.Date(z$t)<=y,]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56850331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档