标签: posixct

POSIXct和xts中的时区,从R中的GMT转换

xts在索引为POSIXct和时区为GMT 的对象中有一堆1分钟的返回.回报是在纽约证券交易所,所以我想转换到东部时区,但我想妥善照顾夏令时.这样做的最佳方式是什么?我在EST时区和EDT时区之间有点困惑.我想在冬季和夏季将我的时间恰当地转换为纽约时报.

timezone r posixct xts timestamp-with-timezone

6
推荐指数
1
解决办法
4898
查看次数

排除R中的特定时间段

我是R的初学者,并尝试在某些时间段内搜索数据提取但似乎找不到任何东西.

我有一个连续数据的时间序列,以10分钟的间隔测量,为期五个月.为简单起见,数据有两列,如下所示:

Timestamp   Temp.Diff
2/14/2011 19:00 -0.385
2/14/2011 19:10 -0.535
2/14/2011 19:20 -0.484
2/14/2011 19:30 -0.409
2/14/2011 19:40 -0.385
2/14/2011 19:50 -0.215

......接下来的五个月还会继续.我已经使用as.POSIXct()读入了Timestamp列到R中.

假设一天的某些时间是我感兴趣的,(例如,从中午12点到下午3点),我想无论是要排除的其他时间为一天,或只是提取那3个小时,但仍然有数据流顺序地(即以时间序列).我知道如果您知道行号,您可以轻松地对数据进行子集化,但由于这是一个更大的数据集,有没有办法对R进行编码,因此它会自动识别我正在查看的时间段?

r date posixct

6
推荐指数
1
解决办法
4119
查看次数

准确地从字符 - > POSIXct->字符转换为亚毫秒日期时间

我在文件中有一个字符日期时间列.我加载文件(进入a data.table)并执行需要将列转换为的内容POSIXct.然后我需要将POSIXct值写回文件,但日期时间将不相同(因为它打印不正确).

这种打印/格式化问题是众所周知的,并且已经多次讨论过.我读过一些描述这个问题的帖子.我发现的最权威的答案是针对这个问题给出的.该问题的答案提供了两个应该解决此问题的函数(myformat.POSIXctform),但它们似乎不适用于此示例:

x <- "04-Jan-2013 17:22:08.139"
options("digits.secs"=6)
form(as.POSIXct(x,format="%d-%b-%Y %H:%M:%OS"),format="%d-%b-%Y %H:%M:%OS3")
[1] "04-Jan-2013 17:22:08.138"
form(as.POSIXct(x,format="%d-%b-%Y %H:%M:%OS"),format="%d-%b-%Y %H:%M:%OS4")
[1] "04-Jan-2013 17:22:08.1390"
myformat.POSIXct(as.POSIXct(x,format="%d-%b-%Y %H:%M:%OS"),digits=3)
[1] "2013-01-04 17:22:08.138"
myformat.POSIXct(as.POSIXct(x,format="%d-%b-%Y %H:%M:%OS"),digits=4)
[1] "2013-01-04 17:22:08.1390"
Run Code Online (Sandbox Code Playgroud)

我的sessionInfo:

R version 2.15.2 (2012-10-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                        
[5] LC_TIME=C                              

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
[1] fasttime_1.0-0   data.table_1.8.9 …
Run Code Online (Sandbox Code Playgroud)

r posixct

6
推荐指数
2
解决办法
9050
查看次数

POSIXct使用不同的时区进行数字化

我想我一定不能理解POSIXct是如何工作的.据我所知,这是自纪元以来的几秒钟,其中纪元是1970-01-01 GMT的标准时间.

我在PST中有两个POSIXct时间,一个在PST中,绝对时间相同.然而,当我将它们转换为数值时,结果是不同的......有人能指出我做错了吗?

> pst = as.POSIXct('2011-01-10 06:45:00', tz = 'PST')
> est = as.POSIXct('2011-01-10 09:45:00', tz = 'EST')
> as.numeric(pst)
 [1] 1294641900
> as.numeric(est)
 [1] 1294670700
Run Code Online (Sandbox Code Playgroud)

这是我的会话信息:

> sessionInfo()
R version 2.13.0 (2011-04-13)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=C              LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C\
                  LC_ADDRESS=C
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
 [1] RSQLite_0.9-4      snow_0.3-8         RMySQL_0.8-0       DBI_0.2-5          gtools_2.6.2       reshape2_1.1       ggplot2_0.8.9      proto_0.3-9.2      reshape_0.8.4      fTrading_2100.76   fBasics_\
2110.79 …
Run Code Online (Sandbox Code Playgroud)

r posixct

6
推荐指数
1
解决办法
927
查看次数

如何防止 write.csv 将 POSIXct、日期和时间类更改回字符/因子?

我有一个 .csv 文件,其中每个字段用于日期时间、日期和时间。最初它们都是字符字段,我已经相应地转换了它们。在我的代码结束时,如果我这样做:

str(data)
Run Code Online (Sandbox Code Playgroud)

我会得到

datetime: POSIXct
date: Date
time: Class 'times'  atomic [1:2820392] (....) attr(*, "format")= chr "h:m:s"
Run Code Online (Sandbox Code Playgroud)

现在,我对此非常满意,我想创建一个 .csv 文件,所以这就是我所拥有的:

write.csv(data, file = "data.csv", row.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

我也试过

write.table(data, "data.csv", sep = ",", row.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

我对两者都得到了相同的结果,这就是在编写新的 .csv 时我的所有转换都丢失了:一切都回到了一个角色。

我怀疑我在 write 函数中遗漏了一些参数,但我整个下午都在搜索,但找不到什么。有人可以帮忙吗?

time r date posixct write.table

6
推荐指数
2
解决办法
7735
查看次数

如何从 POSIXct 元素中提取正确的日期?

如何从代码的第一列中获取正确的日期?

test <- data.frame(posixdate = c("2013-05-01 00:59:00", "2013-05-01 01:59:00", "2013-05-01 02:59:00", "2013-05-01 03:59:00"))
test$posixdate <- as.POSIXct(test$posixdate, format="%Y-%m-%d %H:%M:%S" )
test$date <- as.Date(test$posixdate)
Run Code Online (Sandbox Code Playgroud)

上面的代码导致:

  posixdate           date
1 2013-05-01 00:59:00 2013-04-30
2 2013-05-01 01:59:00 2013-04-30
3 2013-05-01 02:59:00 2013-05-01
4 2013-05-01 03:59:00 2013-05-01
Run Code Online (Sandbox Code Playgroud)

前两个日期不正确。我做错了什么?
如果as.Date()不是正确的功能,我怎样才能获得日期(没有小时、分钟、秒)?

posix r posixct as.date

6
推荐指数
1
解决办法
6630
查看次数

如何从 POSIXct 对象获取原点

我有一个像这样的函数:

foo = function(time_in){
    # code here that changes POSIXct to numeric
    time_out = as.POSIXct(time_in, origin = '1970-01-01')
}
Run Code Online (Sandbox Code Playgroud)

用户time_in作为 POSIXct 对象输入的位置。我在线性模型 ( lm()) 中使用此参数,该模型将我的值以数字形式返回。最后,我想将其转换回我的用户的 POSIXct 对象。问题是,as.POSIXct()需要一个origin通常为 UTC 时间 1970 年 1 月 1 日的时间。但是,如果我的用户在不同的来源工作怎么办?我如何提取起源time_in并将其用作 的参数time_out

我已经查找了有关如何获取原点的文档,但是str(time_in)没有attributes(time_in)给我任何东西,而且我还没有找到更多其他内容。由于这将位于一个包中,因此我想坚持使用基本 R 函数来限制所需的依赖项数量。

datetime posix r posixct

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

r, write_csv 将所有时间/日期更改为 UTC

我发现了一个非常烦人的问题,我想与社区分享。这是一个我已经找到了可接受的解决方案的问题(详情如下),但我现在有几个后续问题。我对时间戳和 POSIX 变量的了解有限,特别是 plyr、dplyr 和 readr 如何处理这些。

在使用 POSIX 变量(也就是日期和时间戳)时,我发现 readr 中的 write_csv 将这些变量更改为 UTC 时间。

我正在从 API 下载数据并保留时间戳。每次抓取数据时,我都会将其绑定到现有文件并保存该文件。我的时区是 MDT,我正在使用 MDT 时间请求数据,然后我试图以 UTC 时间绑定到一个文件,但时间不匹配......它变得混乱和令人沮丧。从本质上讲,我试图创建的漂亮的时间戳数据库正在变成一堆垃圾。

为了解决这个问题,我使用以下方法将 POSIX 时间列转换为字符列:

df.time <- as.character(df.time)
Run Code Online (Sandbox Code Playgroud)

这允许我将文件保存在与 API 返回给我的时间戳一致的时区中。

这使我想到以下一系列问题:

  1. 是否有可以跨时区连接 POSIX 变量的程序?例如,如果是中午 MDT,则是 UTC 下午 6 点。我可以根据这些时间戳加入两个数据帧,而不必先将它们转换为相同的时区吗?
  2. 是否可以防止 write_csv 将 POSIX 变量更改为 UTC?
  3. 是否有不更改 POSIX 变量的 csv 写入函数?

编辑:我已经包含了一些我正在谈论的示例数据:

> df1 <- as.data.frame(fromJSON("https://api.pro.coinbase.com/products/BTC-USD/candles?start=2018-07-23&12:57:00?stop=2018-07-23&19:34:58granularity=300"))
> colnames(df1) <- c("time", "low", "high", "open", "close", "volume")
> df1$time <- anytime(df1$time)
> df1Sort <- df1[order(df1$time),]
> head(df1Sort, 5)
                   time     low …
Run Code Online (Sandbox Code Playgroud)

r posixct readr

6
推荐指数
1
解决办法
2565
查看次数

汇总时间序列的多个组中的数据

我在不同的位置和时间对鸟类进行了一系列观察。数据框如下所示:

birdID   site          ts
1       A          2013-04-15 09:29
1       A          2013-04-19 01:22
1       A          2013-04-20 23:13
1       A          2013-04-22 00:03
1       B          2013-04-22 14:02
1       B          2013-04-22 17:02
1       C          2013-04-22 14:04
1       C          2013-04-22 15:18
1       C          2013-04-23 00:54
1       A          2013-04-23 01:20
1       A          2013-04-24 23:07
1       A          2013-04-30 23:47
1       B          2013-04-30 03:51
1       B          2013-04-30 04:26
2       C          2013-04-30 04:29
2       C          2013-04-30 18:49
2       A          2013-05-01 01:03
2       A          2013-05-01 23:15
2       A          2013-05-02 00:09 …
Run Code Online (Sandbox Code Playgroud)

r posixct dplyr tidyverse mutate

6
推荐指数
1
解决办法
84
查看次数

在R中使用dplyr :: if_else()基于另一个变量的值更改POSIXct时间戳的时区

我正在使用POSIXct格式的一些时间戳。目前,它们都显示在“ UTC”时区中,但实际上有些已知处于“ America / New_York”时区中。我想更正时间戳,以便它们都读为正确的时间。

我最初使用和ifelse()一起声明lubridate::with_tz()。这没有按预期方式工作,因为ifelse()未在POSIXct中返回值。

然后,我dplyr::if_else()根据此处的其他帖子进行了尝试,但效果也不理想。

我可以使用更改单个时间戳,甚至可以将时间戳列表更改为不同的时区with_tz()(因此我知道它可以工作),但是当我在if_else()输出中使用它时,所有的值都将在给定“ yes”参数的情况下返回in if_else()

library(lubridate)
library(dplyr)

x <- data.frame("ts" = as.POSIXct(c("2017-04-27 13:44:00 UTC", 
"2017-03-10 12:22:00 UTC", "2017-03-22 10:24:00 UTC"), tz = "UTC"), 
"tz" = c("UTC","EST","UTC"))

x <- mutate(x, ts_New = if_else(tz == "UTC", with_tz(ts, "America/New_York"), ts))
Run Code Online (Sandbox Code Playgroud)

预期结果低于ts_New的时间戳调整为新时区的情况,但仅当tz =“ UTC”中的值时才如此。tz =“ America / New_York”的时间戳不应更改。

                   ts      tz                  ts_NEW
1 2017-04-27 13:44:00     UTC     2017-04-27 09:44:00
2 2017-03-10 12:22:00     EST     2017-03-10 12:22:00
3 2017-01-22 …
Run Code Online (Sandbox Code Playgroud)

timestamp r posixct lubridate dplyr

6
推荐指数
1
解决办法
88
查看次数