标签: posixct

R 使用 as.Date() 转换带有 BST/GMT 标签的 POSIXct 日期

我需要在动物园对象的索引上使用 as.Date。一些日期在 BST 中,因此在转换时,我(仅)在这些条目上损失了一天。我根本不关心一小时的差异,甚至不关心日期的时间部分,我只想确保显示的日期保持不变。我猜这不是很难,但我无法做到。有人可以帮忙吗?

class(xtsRet)
#[1] "xts" "zoo"

index(xtsRet)
#[1] "2007-07-31 BST" "2007-08-31 BST" "2007-09-30 BST" "2007-10-31 GMT"

class(index(xtsRet))
#[1] "POSIXt"  "POSIXct"

index(xtsRet) <- as.Date(index(xtsRet))

index(xtsRet)
#[1] "2007-07-30" "2007-08-30" "2007-09-29" "2007-10-31"
Run Code Online (Sandbox Code Playgroud)

最小可重复的示例(不需要zoo包装):

my_date <- as.POSIXct("2007-04-01") # Users in non-UK timezone will need to
                                    # do as.POSIXct("2007-04-01", "Europe/London")
my_date
#[1] "2017-04-01 BST"

as.Date(my_date)
#[1] "2017-03-31"
Run Code Online (Sandbox Code Playgroud)

r date posixct binary-search-tree xts

3
推荐指数
1
解决办法
2450
查看次数

存储没有日期但没有作为类字符的时间

我的类字符数据框中有一个local.time列,其中包含如下元素:

> a$local.time
 [1] "1:30 AM"  "6:29 AM"  "6:59 AM"  "9:54 AM"  "10:14 AM" "10:34 AM" "12:54 PM" "1:15 PM"  "1:20 PM" 
 [10] "1:20 PM"  "2:15 PM"  "2:15 PM"  "4:23 AM"  "6:28 AM"  "2:45 PM"  "3:08 PM"  "3:23 PM"  "3:58 PM" 
Run Code Online (Sandbox Code Playgroud)

我想将它们从类字符转换为时间变量.所以我用过:

> as.POSIXct(a$local.time, tz = "", format = "%I:%M %p", usetz = FALSE)
Run Code Online (Sandbox Code Playgroud)

这导致:

[1] "2014-10-31 01:30:00 EDT" "2014-10-31 06:29:00 EDT" "2014-10-31 06:59:00 EDT" "2014-10-31       09:54:00 EDT"
[5] "2014-10-31 10:14:00 EDT" "2014-10-31 10:34:00 EDT" "2014-10-31 12:54:00 EDT" "2014-10-31 13:15:00 …
Run Code Online (Sandbox Code Playgroud)

datetime r dataframe posixct

3
推荐指数
1
解决办法
1032
查看次数

为什么在将列表转换为向量时将POSIXct转换为数字

我有一个列表redDressTweetsstatusES.status是一个有字段的类created.我正在尝试列出发布推文的时间列表.这是我试图这样做的方式

times <- unlist(lapply(redDressTweets, function(tweet) {tweet$created }))
Run Code Online (Sandbox Code Playgroud)

输出是数字向量:

[1] 1478044029 1477954062 1477909847 1477887746 1477832560 1477640940 1477640939
[8] 1477628031 1477540826
Run Code Online (Sandbox Code Playgroud)

但是这个类redDressTweets[[1]]$created"POSIXct" "POSIXt".

为什么会发生这种情况?如何阻止它将POSIXct转换为数字?

r posixct

3
推荐指数
1
解决办法
673
查看次数

将日期时间从字符转换为 POSIXct 对象

我有一个工具可以以不规则的时间格式导出数据。我需要将datetime向量组合成datetime以下POSIXct格式的新向量:%Y-%m-%d %H:%M:%S. 出于好奇,我试图做到这一点在三种不同的方式,使用as.POSIXct()strftime()strptime()。使用下面的示例数据时,只有as.POSIXct()strftime()函数有效,但我很好奇为什么strptime()会产生NAs? 另外,我无法使用...将strftime()输出转换为POSIXct对象as.POSIXct()

在我的真实数据(其中我只为您提供第一个行)上尝试这些相同的函数时,我遇到了一个完全不同的问题。只有strftime()功能在工作。出于某种原因,该as.POSIXct()函数也在产生NAs,这是我实际需要将 mydatetime转换为POSIXct对象的唯一命令......

这些功能之间似乎存在细微差别,我想知道如何更有效地使用它们。谢谢!

可重现的例子:

## Creating dataframe:
date <- c("2017-04-14", "2017-04-14","2017-04-14","2017-04-14")
time <- c("14:24:24.992000","14:24:25.491000","14:24:26.005000","14:24:26.511000")
value <- c("4.106e-06","4.106e-06","4.106e-06","4.106e-06")
data <- data.frame(date, time)
data <- data.frame(data, value) ## I'm sure there is a better way …
Run Code Online (Sandbox Code Playgroud)

datetime r strptime date-formatting posixct

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

在data.table中舍入POSIXct

使用此问题中的相同数据,在data.table v1.9.2中将日期时间舍入到第二个是一个问题.

require(data.table)
options(digits.secs=3)  # usually placed in .Rprofile
DT <- data.table(timestamp=c(as.POSIXct("2013-01-01 17:51:00.707"),
                             as.POSIXct("2013-01-01 17:51:59.996"),
                             as.POSIXct("2013-01-01 17:52:00.059"),
                             as.POSIXct("2013-01-01 17:54:23.901"),
                             as.POSIXct("2013-01-01 17:54:23.914")))
DT
DT[ , round(timestamp)]  # looks good
DT[ , timestamp_rounded := round(timestamp)]  # does not work
DT[ , timestamp_rounded := round(timestamp, units="secs")]  # does not work
DT
#                   timestamp timestamp_rounded
# 1: 2013-01-01 17:51:00.707       1,0,0,24,24
# 2: 2013-01-01 17:51:59.996    51,52,52,54,54
# 3: 2013-01-01 17:52:00.059    17,17,17,17,17
# 4: 2013-01-01 17:54:23.901         1,1,1,1,1
# 5: 2013-01-01 17:54:23.914         0,0,0,0,0
Run Code Online (Sandbox Code Playgroud)

我找到了一个解决方案lubridate …

r posixct data.table

2
推荐指数
1
解决办法
596
查看次数

R ggplot按日期分组,并在相同日期时间的x轴上绘制时间

我有一个df整数变量counts,和一个POSIXct datetime变量.datetime变量表示不同日期的分钟间隔:

counts  datetime
246 02/11/2011 19:00
237 02/11/2011 19:01
268 02/11/2011 19:02
496 02/11/2011 19:03
259 02/11/2011 19:04

548 09/12/2011 20:14
Run Code Online (Sandbox Code Playgroud)

我希望每天都有一个线图,x轴上有不同的HH:MM.我可以通过以下方式获得日期,时间和分钟lubridate:

require(lubridate)
day(df$datetime)
minute(df$datetime)
Run Code Online (Sandbox Code Playgroud)

但我无法将它们组合在一起(我已尝试将日期时间转换为HH:MM字符的路线失败).我错过了下面的"x =因子(HH:日期时间的MM)".有什么想法评论?

ggplot(df, aes(x=factor(HH:MM of datetime), y=counts, group=day(datetime)) + geom_line()
Run Code Online (Sandbox Code Playgroud)

示例:每行应该是不同的一天.x轴应为HH:MM,y为计数. 例

数据:

structure(list(all = c(246, 237, 268, 496, 259, 294, 414, 290, 
267, 375, 402, 355, 572, 319, 354, 612, 478, 327, 511, 500, 468, 
565, 472, 524, 844, 442, 382, 515, 542, 390, 511, 759, 933, …
Run Code Online (Sandbox Code Playgroud)

datetime r ggplot2 posixct

2
推荐指数
1
解决办法
4242
查看次数

计算不同行的列之间的时间差(difftime)

我有不同工作的"开始"和"结束"时间数据,按"所有者"分组:

Data <- data.frame(
  job = c(1, 2, 3, 4, 5),
  owner = c("name1", "name2", "name1", "name1", "name2"),
  Start = as.POSIXct(c("2015-01-01 15:00:00", "2015-01-01 15:01:00", "2015-01-01 15:13:00", "2015-01-01 15:20:00", "2015-01-01 15:39:02"), format="%Y-%m-%d %H:%M:%S"),
  End =   as.POSIXct(c("2015-01-01 15:11:11", "2015-01-01 15:17:21", "2015-01-01 15:17:00", "2015-01-01 15:31:21", "2015-01-01 15:40:11"), format="%Y-%m-%d %H:%M:%S")
)
Run Code Online (Sandbox Code Playgroud)

对于每个所有者,我想计算每个所有者的作业之间的空闲时间,即一个作业的"结束"时间与下一个作业的"开始"时间之间的差异.

如何使用difftime()不同列中的特定行和时间之间的时间差来计算?

结果应如下所示:

job, owner, idletime
1, name1, NA
2, name2, NA
3, name1, 1.816667  # End of row 1 minus Start of row 3
4, name1, 3.0       # End of …
Run Code Online (Sandbox Code Playgroud)

datetime r posixct difftime

2
推荐指数
1
解决办法
1187
查看次数

如何创建POSIXct矩阵

当我在R 3.1.2中创建给定POSIXct向量的矩阵时,矩阵的条目是数字而不是POSIXct:

x <- as.POSIXct("2012-02-25 19:00:00")
x
attributes(x)

m <- matrix(x, nrow=2, ncol=3)
m
attributes(m)
Run Code Online (Sandbox Code Playgroud)

创建POSIXct值矩阵的最佳方法是什么?

r matrix posixct

2
推荐指数
1
解决办法
850
查看次数

从R中的POSIXct中提取2位数小时

我想从POSIXctR中提取小时,但检索2位数的答案.

例如,

test=as.POSIXct("2015-03-02 03:15:00")
test
[1] "2015-01-02 03:15:00 GMT"
month(testing)
[1] 1
hour(testing)
[1] 3
Run Code Online (Sandbox Code Playgroud)

结果给出相关的月份和小时,但我希望看到0103,而不是仅仅13.

datetime r hour posixct

2
推荐指数
1
解决办法
2439
查看次数

如何在时间列上组合基于R数据帧的约束

我有两个R表,每个表都有一个用户列表和一个时间戳,对应于他们采取某个操作的时间.

这些(df1)中的第一个表有一个详尽的用户列表,用户将有多个具有不同时间戳的行.

第二个(df2)将有一个更有限的用户列表,但用户将再次使用不同的时间戳在表中.

我希望能够做的是加入这两个表,最后得到一个与用户匹配的表和df1最接近的时间戳df2,只要时间戳df2发生一个表之后df1.

例如,如果我有两个表,如:

df1 <- data.frame(c(1,1,2,3), as.POSIXct(c('2016-12-01 08:53:20', '2016-12-01 12:45:47', '2016-12-01 15:34:54', '2016-12-01 00:49:50')))
names(df1) <- c('user', 'time')

df2 <- data.frame(c(1,1,3), as.POSIXct(c('2016-12-01 07:11:01', '2016-   12-01 11:50:11', '2016-12-01 01:19:10')))
names(df2) <- c('user', 'time')
Run Code Online (Sandbox Code Playgroud)

给我们:

> df1
  user                time
1    1 2016-12-01 08:53:20
2    1 2016-12-01 12:45:47
3    2 2016-12-01 15:34:54
4    3 2016-12-01 00:49:50

> df2
  user                time
1    1 2016-12-01 07:11:01
2    1 2016-12-01 …
Run Code Online (Sandbox Code Playgroud)

r dataframe posixct

2
推荐指数
1
解决办法
94
查看次数