标签: posixct

as.POSIXct给出了一个意想不到的时区

我正在尝试将一个yearmon日期(从动物园包)转换为UTC时区的POSIXct.这就是我试图做的事情:

> as.POSIXct(as.yearmon("2010-01-01"), tz="UTC")
[1] "2010-01-01 01:00:00 CET"
Run Code Online (Sandbox Code Playgroud)

我转换日期时得到的相同:

> as.POSIXct(as.Date("2010-01-01"),tz="UTC")
[1] "2010-01-01 01:00:00 CET"
Run Code Online (Sandbox Code Playgroud)

让它工作的唯一方法是将一个字符作为参数传递:

> as.POSIXct("2010-01-01", tz="UTC")
[1] "2010-01-01 UTC"
Run Code Online (Sandbox Code Playgroud)

我查看了DateTimeClasses,tzsettimezones的文档.我的/ etc/localtime设置为Europe/Amsterdam.除了设置TZ环境变量之外,我找不到将tz设置为UTC的方法:

> Sys.setenv(TZ="UTC")
> as.POSIXct(as.Date("2010-01-01"),tz="UTC")
[1] "2010-01-01 UTC"
Run Code Online (Sandbox Code Playgroud)

从yearmon或Date创建POSIXct时是否可以直接设置时区?

编辑:

我检查了函数as.POSIXct.yearmon.这个传递给as.POSIXct.Date.

> zoo:::as.POSIXct.yearmon
function (x, tz = "", ...) 
as.POSIXct(as.Date(x), tz = tz, ...)
<environment: namespace:zoo>
Run Code Online (Sandbox Code Playgroud)

就像Joshua说的那样,时区在as.POSIXct.Date中丢失了.现在我将使用Richies建议手动设置tzone:

attr(x,"tzone")< - 'UTC'

这解决了丢失的tzone的问题,它仅用于演示,而不是像Grothendieck和Dwin建议的内部.

r zoneinfo posixct

12
推荐指数
2
解决办法
5505
查看次数

如何使用POSIXct类型的列初始化data.frame?

我可以通过初始化data.frame

df <- data.frame(a=numeric(), b=character())
Run Code Online (Sandbox Code Playgroud)

但是如何定义POSIXct类型的列?

df <- data.frame(a=numeric(), b=character(), c=POSIXct())
Run Code Online (Sandbox Code Playgroud)

不行.

r dataframe posixct

12
推荐指数
1
解决办法
7491
查看次数

R:as.POSIXct timezone和scale_x_datetime在我的数据集中发布

我花了一些时间试图弄清楚当应用scale_x_datetime时为什么小时刻度被移动了.我已经尝试在创建日期/时间列时给出时区.我在包中使用了ggplot和scale_x_datetime().小时刻度错误,哪个数据点与其日期/时间列中的时间不匹配.

以下是处理我的数据集的一些过程.

  DF$DateTime<-as.POSIXct(DF$timestamp,format="%m/%d/%y %H:%M", tz="America/Toronto")
  DF$Date<-as.Date(DF$DateTime)

  lims <- as.POSIXct(strptime(c("2015-07-21 00:00","2015-07-23 00:00"), format = "%Y-%m-%d %H:%M"), tz="America/Toronto")    

  ggplot(DF) + geom_line(aes(x=DateTime, y=-Diff,group=Date)) + scale_x_datetime(limits =lims, breaks=date_breaks("2 hour"), labels=date_format("%m/%d %H:%M"))
Run Code Online (Sandbox Code Playgroud)

我在这里错过了吗?请帮我搞清楚.非常感谢!

r ggplot2 posixct

12
推荐指数
2
解决办法
3634
查看次数

如何在R str()中扩展Posixct字段?

我正在尝试扩展一个自定义Posixct字段中显示的因子数量,其中normal way(str(DF, list.len=ncol(DF), vec.len=20))不起作用.我在这里请求20,但它始终显示两个("2017-01-01 08:40:00" "2017-01-01 08:50:00" ...),无论列表的长度(这里3).数据data.csv

"AAA", "BBB"
1, 01012017-0940+0100
2, 01012017-0950+0100
3, 01012017-0838+0100
Run Code Online (Sandbox Code Playgroud)

library('methods') # setClass

# https://unix.stackexchange.com/a/363290/16920
setClass('iso8601')

# https://stackoverflow.com/questions/5788117/only-read-limited-number-of-columns
setAs("character","iso8601",function(from) strptime(from,format="%d%m%Y-%H%M%z"))

DF <- read.csv(file='data.csv',
        sep=',',
        header=TRUE,
        colClasses=c('numeric','iso8601'),
        strip.white=TRUE)

DF

str(DF, list.len=ncol(DF), vec.len=20)
Run Code Online (Sandbox Code Playgroud)

R 3.3.3中的输出

 AAA                 BBB
1  1 2017-01-01 08:40:00
2  2 2017-01-01 08:50:00
3  3 2017-01-01 07:38:00
'data.frame':  3 obs. of  2 variables:
 $ AAA : num  1 2 3
 $ BBB : POSIXlt, format: "2017-01-01 …
Run Code Online (Sandbox Code Playgroud)

r posixct

12
推荐指数
1
解决办法
387
查看次数

舍入时间到R的最近时刻

我有格式的数据

time <-  c("16:53", "10:57", "11:58")
Run Code Online (Sandbox Code Playgroud)

等等

我想创建一个新列,其中每个时间都舍入到最接近的小时.我似乎无法让POSIX命令为我工作.

as.character(格式(data2 $ time,"%H:%M"))

format.default中的错误(结构(as.character(x),names = names(x),dim = dim(x),:invalid'trim'参数

更别说使用round命令了.任何人都可以建议吗?

datetime timestamp r posixct

11
推荐指数
1
解决办法
9813
查看次数

修改POSIXct对象的时区而不更改显示

我有一个POSIXct对象,并希望更改它的tz属性WITHOUT R来解释它(解释它将意味着改变日期时间在屏幕上的显示方式).

一些背景:我正在使用fasttime来自S.Urbanek 的包,它采用字符串并将其POSIXct快速投射.问题是字符串应该代表"GMT"中的日期时间,而不是我的数据的情况.

我最终得到一个POSIXct对象tz=GMT,实际上是tz=GMT+1,如果我改变时区

attr(datetime, "tzone") <- "Europe/Paris";
datetime  <- .POSIXct(datetime,tz="Europe/Paris"); 
Run Code Online (Sandbox Code Playgroud)

然后它将"显示"为GMT+2(基础值永远不会改变).

编辑:这是一个例子

datetime=as.POSIXct("2011-01-01 12:32:23.234",tz="GMT")
attributes(datetime)
#$tzone
#[1] "GMT"
datetime
#[1] "2011-01-01 12:32:23.233 GMT"
Run Code Online (Sandbox Code Playgroud)

如何在没有R的情况下更改此属性来解释它,又如何更改tzone并仍然显示日期时间"2011-01-01 12:32:23.233"

编辑/解决方案,@ GSee的解决方案相当快,lubridate :: force_tz非常慢

datetime=rep(as.POSIXct("2011-01-01 12:32:23.234",tz="GMT"),1e5)
f <- function(x,tz) return(as.POSIXct(as.numeric(x), origin="1970-01-01", tz=tz))
> system.time(datetime2 <- f(datetime,"Europe/Paris"))
   user  system elapsed 
   0.01    0.00    0.02 
> system.time(datetime3 <- force_tz(datetime,"Europe/Paris"))
   user  system elapsed 
   5.94    0.02    5.98 
identical(datetime2,datetime3)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

timezone r posixct

10
推荐指数
2
解决办法
7907
查看次数

05:00:00 - 28:59:59时间格式

我有数据集,time.start从5:00:00到28:59:59(即01.01.2013 28:00:00实际上是02.01.2013 04:00:00).日期是%d.%m.%Y格式.

      Date Time.start   
01.01.2013   22:13:07
01.01.2013   22:52:23
01.01.2013   23:34:06
01.01.2013   23:44:25
01.01.2013   27:18:48
01.01.2013   28:41:04
Run Code Online (Sandbox Code Playgroud)

我想将其转换为普通日期格式.

dates$date <- paste(dates$Date,dates$Time.start, sep = " ")
dates$date <- as.POSIXct(strptime(dates$date, "%m.%d.%Y %H:%M:%S"))
Run Code Online (Sandbox Code Playgroud)

但显然我有NA时间> 23:59:59

我应该如何修改我的代码?

r date posixct

10
推荐指数
2
解决办法
1192
查看次数

使用ggplot2绘制POSIXct时间戳系列

我想绘制负载测试的结果.每行包含以秒为单位的时间戳和请求的响应时间.例如:

timestamp <- c(1441229131, 1441229132, 1441229133, 1441229134, 1441229135)
response.time <- c(22, 48, 48, 59, 52)
lt1 <- data.frame(timestamp, response.time)
lt1$datetime <- as.POSIXct(lt1$timestamp, origin="1970-01-01", tz="GMT")
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试绘制这个时,x轴显示的是奇怪的数字而不是格式正确的日期.

g1 <- ggplot(lt1, aes(datetime, response.time))
g1 <- g1 + geom_point()
g1 <- g1 + theme(axis.text.x=element_text(angle=90, hjust=1))
g1
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2 posixct

10
推荐指数
1
解决办法
1万
查看次数

如何随时避免(<numeric>)"通过引用更新"?

我想将数字变量转换为POSIXct使用anytime.我的问题是anytime(<numeric>)转换输入变量 - 我想保留它.

简单的例子:

library(anytime)
t_num <- 1529734500
anytime(t_num)
# [1] "2018-06-23 08:15:00 CEST"
t_num
# [1] "2018-06-23 08:15:00 CEST"
Run Code Online (Sandbox Code Playgroud)

这不同于的行为"通过引用非更新" as.POSIXctbaseR:

t_num <- 1529734500
as.POSIXct(t_num, origin = "1970-01-01")
# [1] "2018-06-23 08:15:00 CEST"
t_num
# 1529734500
Run Code Online (Sandbox Code Playgroud)

同样,anydate(<numeric>)也通过引用更新:

d_num <- 17707
anydate(d_num)
# [1] "2018-06-25"
d_num
# [1] "2018-06-25"
Run Code Online (Sandbox Code Playgroud)

我找不到这种行为的明确描述?anytime.我可以as.POSIXct像上面一样使用,但有人知道如何处理这个anytime吗?

datetime r date posixct

10
推荐指数
2
解决办法
402
查看次数

在 R 中使用 lubridate 从日期确定季节

我有一个非常大的数据集,其中DateTime包含一个包含 POSIXct-Values的列。我需要根据列确定季节(冬季 - 夏季)DateTime。我创建了一个在小数据集上运行良好的函数,但是当我在大数据集上使用它时会崩溃。有人能看到我的错误吗?

我创建了 4 个函数:

  • 3 个子函数,以便我可以使用 *apply 函数进行逻辑比较和选择
  • 1 判断季节的函数

下面是函数:

require(lubridate)

# function for logical comparison (to be used in *apply)
greaterOrEqual <- function(x,y){
  ifelse(x >= y,T,F)
}

# function for logical comparison (to be used in *apply)
less <- function(x,y){
  ifelse(x < y,T,F)
}

# function for logical comparison (to be used in *apply)
selFromLogic <- function(VecLogic,VecValue){
  VecValue[VecLogic]
}

# Main Function to determine the season
getTwoSeasons <- function(input.date) {
  Winter1Start …
Run Code Online (Sandbox Code Playgroud)

r posixct lubridate

9
推荐指数
3
解决办法
4433
查看次数

标签 统计

posixct ×10

r ×10

date ×2

datetime ×2

ggplot2 ×2

dataframe ×1

lubridate ×1

timestamp ×1

timezone ×1

zoneinfo ×1