标签: posixct

从POSIXct中提取时间

如何从丢弃日期部分的一系列POSIXct对象中提取时间?

例如,我有:

times <- structure(c(1331086009.50098, 1331091427.42461, 1331252565.99979, 
1331252675.81601, 1331262597.72474, 1331262641.11786, 1331269557.4059, 
1331278779.26727, 1331448476.96126, 1331452596.13806), class = c("POSIXct", 
"POSIXt"))
Run Code Online (Sandbox Code Playgroud)

对应于这些日期:

"2012-03-07 03:06:49 CET" "2012-03-07 04:37:07 CET" 
"2012-03-09 01:22:45 CET" "2012-03-09 01:24:35 CET" 
"2012-03-09 04:09:57 CET" "2012-03-09 04:10:41 CET"
"2012-03-09 06:05:57 CET" "2012-03-09 08:39:39 CET"
"2012-03-11 07:47:56 CET" "2012-03-11 08:56:36 CET"
Run Code Online (Sandbox Code Playgroud)

现在,我有一些在这些时间测量的参数值

val <- c(1.25343125e-05, 0.00022890575, 
         3.9269125e-05, 0.0002285681875, 
         4.26353125e-05, 5.982625e-05, 
         2.09575e-05, 0.0001516951251, 
         2.653125e-05, 0.0001021391875)
Run Code Online (Sandbox Code Playgroud)

我想绘制val与当天的时间,而不考虑测量val的具体日期.

是否有一个特定的功能可以让我这样做?

time r date posixct

75
推荐指数
5
解决办法
8万
查看次数

R如何用小数秒格式化POSIXct

我认为R错误地使用小数秒格式化POSIXct类型.我通过R-bugs提交了这个作为增强请求的内容,并且"我们认为当前的行为是正确的 - 删除了bug".虽然我非常感谢他们已经完成并将继续做的工作,但我想让其他人对这个特定问题采取行动,并且可能就如何更有效地提出要点提出建议.

这是一个例子:

 > tt <- as.POSIXct('2011-10-11 07:49:36.3')
 > strftime(tt,'%Y-%m-%d %H:%M:%OS1')
 [1] "2011-10-11 07:49:36.2"
Run Code Online (Sandbox Code Playgroud)

也就是说,tt创建为POSIXct时间,小数部分.3秒.当使用一个十进制数字打印时,显示的值为.2.我使用毫秒级精度的时间戳工作很多,这让我很烦恼,因为时间通常比实际值低一个等级.

以下是发生的事情:POSIXct是自纪元以来的浮点秒数.精确处理所有整数值,但在base-2浮点中,与.3最接近的值略小于.3.strftime()格式的所述行为%OSn是向下舍入到请求的小数位数,因此显示的结果为.2.对于其他小数部分,浮点值略高于输入的值,显示屏给出预期结果:

 > tt <- as.POSIXct('2011-10-11 07:49:36.4')
 > strftime(tt,'%Y-%m-%d %H:%M:%OS1')
 [1] "2011-10-11 07:49:36.4"
Run Code Online (Sandbox Code Playgroud)

开发人员的论点是,对于时间类型,我们应该总是向下舍入到请求的精度.例如,如果时间是11:59:59.8,那么用格式打印它%H:%M应该给出"11:59"而不是"12:00",并且%H:%M:%S 应该给出"11:59:59"而不是"12:00:00".我同意这个整数秒和格式标志%S,但我认为对于为小数部分秒设计的格式标志,行为应该是不同的.我希望看到%OSn使用舍入到最近的行为,即使是n = 0同时%S使用循环下来,从而使打印11:59:59.8与格式%H:%M:%OS0将给"12:00:00".这不会影响整数秒的任何事情,因为它们总是精确地表示,但它会更自然地处理小数秒的舍入误差.

这就是如何处理小数部分的打印,例如C,因为整数转换向下舍入:

 double x = 9.97;
 printf("%d\n",(int) x);   //  9
 printf("%.0f\n",x);       //  10
 printf("%.1f\n",x);       //  10.0
 printf("%.2f\n",x);       //  9.97
Run Code Online (Sandbox Code Playgroud)

我做了一个关于如何在其他语言和环境中处理小数秒的快速调查,并且似乎确实没有达成共识.大多数构造设计为整数秒,而小数部分是事后想法.在我看来,在这种情况下,R开发人员做出的选择并非完全不合理,但实际上并不是最好的选择,并且与其他地方用于显示浮点数的约定不一致.

人们的想法是什么?R行为是否正确?这是你自己设计它的方式吗?

r posixct

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

在R中为POSIXct对象添加时间

我想向POSIXct对象添加1小时,但它不支持'+'.

这个命令:

as.POSIXct("2012/06/30","GMT") 
    + as.POSIXct(paste(event_hour, event_minute,0,":"), ,"%H:%M:$S")
Run Code Online (Sandbox Code Playgroud)

返回此错误:

Error in `+.POSIXt`(as.POSIXct("2012/06/30", "GMT"), as.POSIXct(paste(event_hour,  :
    binary '+' is not defined for "POSIXt" objects
Run Code Online (Sandbox Code Playgroud)

如何为POSIXct对象添加几个小时?

datetime r posixct

47
推荐指数
3
解决办法
5万
查看次数

使用基本R功能舍入POSIX日期(POSIXct)

我正在玩很多关于我正在建造的包裹的日期和时间.

在这篇文章中磕磕绊绊地再次提醒我,在转向contrib包之前,查看是否可以使用基本R功能完成某些操作通常并不是一个坏主意.

因此,是否可以POSIXct使用基本R功能来舍入课程日期?

我检查了

methods(round)
Run Code Online (Sandbox Code Playgroud)

"只"给了我

[1] round.Date      round.timeDate*

   Non-visible functions are asterisked
Run Code Online (Sandbox Code Playgroud)

这是我想做的(伪代码)

x <- as.POSIXct(Sys.time())
[1] "2012-07-04 10:33:55 CEST"

round(x, atom="minute")
[1] "2012-07-04 10:34:00 CEST"

round(x, atom="hour")
[1] "2012-07-04 11:00:00 CEST"

round(x, atom="day")
[1] "2012-07-04 CEST"
Run Code Online (Sandbox Code Playgroud)

我知道这可以用timeDate,lubridate等来完成,但是我想保持包依赖性.所以在继续检查相应软件包的源代码之前,我想我会问有人已经做过这样的事情了.

datetime r date rounding posixct

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

检测data.frame中的列是否为.POSIXct的可靠方法

R有is.vector,is.list,is.integer,is.double,is.numeric,is.factor,is.character,等为什么没有is.POSIXct,is.POSIXlt还是is.Date

我需要一种可靠的方法来检测POSIXct物体,class(x)[1] == "POSIXct"看起来真的......很脏.

datetime r posixct

24
推荐指数
3
解决办法
6230
查看次数

如何制作POSIXct的空向量

我想制作一个空的矢量,POSIXct以便我可以放入POSIXct其中:

vec <- vector("POSIXct", 10)
vec
vec[1] <- "2014-10-27 18:11:36 PDT"
vec
Run Code Online (Sandbox Code Playgroud)

这不起作用.有任何想法吗?

r posixct

21
推荐指数
3
解决办法
6870
查看次数

将日期时间字符串转换为R中的POSIXct日期/时间格式

考虑格式的字符串

test <- "YYYY-MM-DDT00:00:00.000-08:00"
Run Code Online (Sandbox Code Playgroud)

我的目标是将这些字符串转换为POSIXct格式,以便我可以绘制数据.我最初的想法是使用

as.POSIXct(test)
Run Code Online (Sandbox Code Playgroud)

...但这似乎将日期时间截断为日期.有什么想法吗?帮助信息as.POSIXct似乎暗示输入应该是由空格分隔的日期和时间,而不是"T".这是我的问题吗?

string datetime r posixct

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

POSIXct的seq()

我的目标是在给定开始,结束和增量(15分钟,1小时,1天)的情况下创建POSIXct时间戳的向量.我希望我可以使用seq它,但我在数字和POSIXct表示之间转换时遇到问题:

now <- Sys.time()
now
# [1] "2012-01-19 10:30:39 CET"
as.POSIXct(as.double(now), origin="1970-01-01", tz="CET")
# [1] "2012-01-19 09:30:39 CET"
as.POSIXct(as.double(now), origin=as.POSIXct("1970-01-01", tz="CET"), tz="CET")
# [1] "2012-01-19 09:30:39 CET"
Run Code Online (Sandbox Code Playgroud)

转换期间会丢失一小时.我究竟做错了什么?

r date posixct

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

R中的字符POSIXct转换在夏令时转换(CEST/CET)时导致错误的时区值

我在将POSIXct转换为字符并返回到R中的POSIXct时遇到问题.我运行以下代码:

time_seq_01 <- seq(as.POSIXct("2012-10-28 02:00:00"), by = 900, length.out = 10)
time_seq_02 <- as.character(time_seq_01)
time_seq_03 <- as.POSIXct(time_seq_02)
Run Code Online (Sandbox Code Playgroud)

或同等学历:

time_seq_01 <- seq(as.POSIXct("2012-10-28 02:00:00"), by = 900, length.out = 10)
time_seq_02 <- format(time_seq_01,usetz = TRUE)
time_seq_03 <- as.POSIXct(time_seq_02)
Run Code Online (Sandbox Code Playgroud)

这是2012年从中欧夏令时(CEST)中欧时间(CET)的夏令时转换(10月02:00 - 03:00的最后一个星期日)的时间戳.

当我把这些元素称为时,我得到了

time_seq_01
[1] "2012-10-28 02:00:00 CEST" "2012-10-28 02:15:00 CEST"
[3] "2012-10-28 02:30:00 CEST" "2012-10-28 02:45:00 CEST"
[5] "2012-10-28 02:00:00 CET"  "2012-10-28 02:15:00 CET" 
[7] "2012-10-28 02:30:00 CET"  "2012-10-28 02:45:00 CET" 
[9] "2012-10-28 03:00:00 CET"  "2012-10-28 …
Run Code Online (Sandbox Code Playgroud)

r posixct

17
推荐指数
1
解决办法
6401
查看次数

如何计算与数据的前一行的时间差

我试图解决的问题是我有一个数据框,其中包含一个排序的POSIXct变量.每行都被分类,我想获得每个级别的每一行之间的时间差异,并将该数据添加回一个新变量.可重现的问题如下.以下功能仅用于为此问题创建具有随机时间的样本数据.

random.time <- function(N, start, end) {
  st <- as.POSIXct(start)
  en <- as.POSIXct(end)
  dt <- as.numeric(difftime(en, st, unit="sec"))
  ev <- sort(runif(N, 0, dt))
  rt <- st + ev
  return(rt)
}
Run Code Online (Sandbox Code Playgroud)

模拟问题的代码如下:

set.seed(123)
category <- sample(LETTERS[1:5], 20, replace=TRUE)
randtime <- random.time(20, '2015/06/01 08:00:00', '2015/06/01 18:00:00')
df <- data.frame(category, randtime)
Run Code Online (Sandbox Code Playgroud)

预期的结果数据框如下:

>category randtime timediff (secs)
>A  2015-06-01 09:05:00 0
>A  2015-06-01 09:06:30 90
>A  2015-06-01 09:10:00 210
>B  2015-06-01 10:18:58 0
>B  2015-06-01 10:19:58 60
>C  2015-06-01 08:14:00 0
>C  2015-06-01 08:16:30 …
Run Code Online (Sandbox Code Playgroud)

datetime r posixct

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

标签 统计

posixct ×10

r ×10

datetime ×5

date ×3

rounding ×1

string ×1

time ×1