我xts在索引为POSIXct和时区为GMT 的对象中有一堆1分钟的返回.回报是在纽约证券交易所,所以我想转换到东部时区,但我想妥善照顾夏令时.这样做的最佳方式是什么?我在EST时区和EDT时区之间有点困惑.我想在冬季和夏季将我的时间恰当地转换为纽约时报.
我是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进行编码,因此它会自动识别我正在查看的时间段?
我在文件中有一个字符日期时间列.我加载文件(进入a data.table)并执行需要将列转换为的内容POSIXct.然后我需要将POSIXct值写回文件,但日期时间将不相同(因为它打印不正确).
这种打印/格式化问题是众所周知的,并且已经多次讨论过.我读过一些描述这个问题的帖子.我发现的最权威的答案是针对这个问题给出的.该问题的答案提供了两个应该解决此问题的函数(myformat.POSIXct和form),但它们似乎不适用于此示例:
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) 我想我一定不能理解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) 我有一个 .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 函数中遗漏了一些参数,但我整个下午都在搜索,但找不到什么。有人可以帮忙吗?
如何从代码的第一列中获取正确的日期?
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()不是正确的功能,我怎样才能获得日期(没有小时、分钟、秒)?
我有一个像这样的函数:
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 函数来限制所需的依赖项数量。
我发现了一个非常烦人的问题,我想与社区分享。这是一个我已经找到了可接受的解决方案的问题(详情如下),但我现在有几个后续问题。我对时间戳和 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 返回给我的时间戳一致的时区中。
这使我想到以下一系列问题:
编辑:我已经包含了一些我正在谈论的示例数据:
> 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) 我在不同的位置和时间对鸟类进行了一系列观察。数据框如下所示:
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) 我正在使用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)