我正在尝试将一个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,tzset和timezones的文档.我的/ 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建议的内部.
我可以通过初始化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)
不行.
我花了一些时间试图弄清楚当应用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)
我在这里错过了吗?请帮我搞清楚.非常感谢!
我正在尝试扩展一个自定义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)
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) 我有格式的数据
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命令了.任何人都可以建议吗?
我有一个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) 我有数据集,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
我应该如何修改我的代码?
我想绘制负载测试的结果.每行包含以秒为单位的时间戳和请求的响应时间.例如:
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)
我想将数字变量转换为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.POSIXct在baseR:
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包含一个包含 POSIXct-Values的列。我需要根据列确定季节(冬季 - 夏季)DateTime。我创建了一个在小数据集上运行良好的函数,但是当我在大数据集上使用它时会崩溃。有人能看到我的错误吗?
我创建了 4 个函数:
下面是函数:
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)