标签: lubridate

润滑间隔的长度

以指定单位表示以intervalin 表示的时间长度的最佳方法是什么lubridate?我能弄明白的就是下面这个混乱的东西:

> ival
[1] 2011-01-01 03:00:46 -- 2011-10-21 18:33:44

> difftime(attr(ival, "start") + as.numeric(ival), attr(ival, "start"), 'days')
Time difference of 293.6479 days
Run Code Online (Sandbox Code Playgroud)

(我还在https://github.com/hadley/lubridate/issues/105上添加了这个功能请求,假设没有更好的方法可用 - 但也许有人知道一个.)

更新 - 显然该difftime功能也无法处理.这是一个例子.

> (d1 <- as.POSIXct("2011-03-12 12:00:00", 'America/Chicago'))
[1] "2011-03-12 12:00:00 CST"
> (d2 <- d1 + days(1))  # Gives desired result
[1] "2011-03-13 12:00:00 CDT"
> (i2 <- d2 - d1)
[1] 2011-03-12 12:00:00 -- 2011-03-13 12:00:00 
> difftime(attr(i2, "start") + as.numeric(i2), attr(i2, "start"), …
Run Code Online (Sandbox Code Playgroud)

r lubridate

7
推荐指数
2
解决办法
9013
查看次数

在R中,使用lubridate将hms对象转换为秒

在lubridate中的简单问题 - 我想将hms对象转换为自当天开始以来的适当秒数.

例如

library(lubridate)
hms("12:34:45")
Run Code Online (Sandbox Code Playgroud)

然后我想确切地知道12小时34分45秒是多长时间

一些明显的东西

seconds(hms("12:34:45"))
Run Code Online (Sandbox Code Playgroud)

回来

45s
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.如何将这些hms值转换为秒?我想用lubridate

r lubridate

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

按时间段汇总的数据

这个问题询问R中的时间段聚合,大熊猫称之为重新采样.最有用的答案是使用XTS包在给定的时间段内分组,应用一些函数,如sum()或mean().

其中一条评论表明,在lubridate中有类似的东西,但没有详细说明.有人可以使用lubridate提供一个惯用的例子吗?我已经阅读了几次相关的rubridate小插图,可以想象一下lubridate和plyr的组合,但是我想确保没有一种我更容易丢失的方法.

为了使示例更真实,假设我想从此数据集中向北行驶的每日自行车总数:

library(lubridate)
library(reshape2)

bikecounts <- read.csv(url("http://data.seattle.gov/api/views/65db-xm6k/rows.csv?accessType=DOWNLOAD"), header=TRUE, stringsAsFactors=FALSE)
names(bikecounts) <- c("Date", "Northbound", "Southbound")
Run Code Online (Sandbox Code Playgroud)

数据如下所示:

> head(bikecounts)
                    Date Northbound Southbound
1 10/02/2012 12:00:00 AM          0          0
2 10/02/2012 01:00:00 AM          0          0
3 10/02/2012 02:00:00 AM          0          0
4 10/02/2012 03:00:00 AM          0          0
5 10/02/2012 04:00:00 AM          0          0
6 10/02/2012 05:00:00 AM          0          0
Run Code Online (Sandbox Code Playgroud)

r lubridate

7
推荐指数
1
解决办法
7168
查看次数

使用parse_date_time将格式dmy与dmY一起解析

我有一个日期字符表示的向量,其中格式主要是dmY(例如27-09-2013),dmy(例如27-09-13),偶尔也有一些bB几个月.因此,parse_date_timelubridate"允许用户指定多个格式顺序以处理异构日期 - 时间字符表示"的包中对我来说可能是非常有用的功能.

但是,当它们与日期一起出现时,似乎parse_date_time有解析dmy日期的问题dmY.dmy单独解析,或dmy与我相关的其他格式一起使用时,它可以正常工作.这种模式也在@ Peyton 在这里回答的评论中注明.建议快速修复,但我想问一下是否有可能处理它lubridate.

在这里,我展示了一些示例,我尝试在dmy格式上解析日期和其他一些格式,并相应地指定orders.

library(lubridate)
# version: lubridate_1.3.0

# regarding how date format is specified in 'orders':
# examples in ?parse_date_time
# parse_date_time(x, "ymd")
# parse_date_time(x, "%y%m%d")
# parse_date_time(x, "%y %m %d")
# these order strings are equivalent and parses the same way
# "Formatting orders might include …
Run Code Online (Sandbox Code Playgroud)

r date lubridate

7
推荐指数
1
解决办法
2458
查看次数

计算两列之间的时差

在转换POSIXCT格式的因子然后应用日期时间格式后,我想取两个pos1和pos2之间的日期时间差.

但是,当我为特定项目执行此操作时,我在控制台中得到了正确的答案,但是当我在整个集合上执行操作时,控制台仅输出数字,而日期框架反映了您可以看到的那些数字.

当我尝试区分时,如何获取数据框中的小时数?我正在使用lubridate包,有没有这样做的功能?

下面是RStudio中描述它的数据的一些示例代码/图片

CR_Date <- data.frame(
  pos1="2014-07-01 00:00:00",
  pos2=c("2014-07-01 00:00:00","2014-07-01 10:15:00")
)
CR_Date[] <- lapply(CR_Date,as.POSIXct)
CR_Date

#        pos1                pos2
#1 2014-07-01 2014-07-01 00:00:00
#2 2014-07-01 2014-07-01 10:15:00

CR_Date$pos2[2] - CR_Date$pos1[2]
#Time difference of 10.25 hours
CR_Date$hours <- CR_Date$pos2 - CR_Date$pos1
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

datetime r lubridate

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

将POSIXct日期更改为每周的第一天

我想Dist使用这些数据(下面)计算每周的平均值,同时保留使用POSIXct时间类的好处.

    df <- structure(list(IndID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), class = "factor", .Label = "AAA"), 
    Date = structure(c(1329436800, 1329458400, 1329480000, 1329501600, 
    1329523200, 1329544800, 1329566400, 1329588000, 1329609600, 
    1329631200, 1329652800, 1329674400, 1329696000, …
Run Code Online (Sandbox Code Playgroud)

datetime r lubridate dplyr

7
推荐指数
1
解决办法
2311
查看次数

将dplyr :: mutate与R中的lubridate :: ymd_hms组合在一起会导致段错误

我尽可能地搜索与此相关的内容,但在SO或dplyr github上找不到任何内容; 可能是一个新问题,因为下面的代码在今天之前运行良好?

问题在概念上很简单:my_data %>% mutate(x = ymd_hms(x))有时调用,但不总是(即随机调用)导致R因捕获的段错误而崩溃.我已经将问题简化为最简单的形式(也在这里:https://gist.github.com/john-sandall/05c3abb24fc738ddc2ad):

require(lubridate)
require(dplyr)

set.seed(42)
make_some_random_datetimes = function(n) ymd("2015-01-01") + seconds(runif(n, min=0, max=60*60*24*365))

d = data.frame(
  col1 = make_some_random_datetimes(5000),
  col2 = make_some_random_datetimes(5000)
)

do_it = function() {
  d %>% mutate(
    col1 = ymd_hms(col1),
    col2 = ymd_hms(col2)  # for some reason, it only crashes when evaluating 2+ cols, if we removed this line it'd be fine
  )
  return(TRUE)
}

do_it()  # doesn't crash every time...it fails every nth time …
Run Code Online (Sandbox Code Playgroud)

r segmentation-fault lubridate dplyr

7
推荐指数
1
解决办法
788
查看次数

dplyr:使用滚动时间窗口对数据进行分组和汇总/变更

我有不规则的时间序列数据表示用户的某种类型的交易.每行数据都带有时间戳,表示当时的事务.根据数据的不规则性,一些用户一天可能有100行,而其他用户一天可能有0或1个事务.

数据可能如下所示:

data.frame(
  id = c(1, 1, 1, 1, 1, 2, 2, 3, 4),
  date = c("2015-01-01", 
           "2015-01-01", 
           "2015-01-05", 
           "2015-01-25",
           "2015-02-15",
           "2015-05-05", 
           "2015-01-01", 
           "2015-08-01", 
           "2015-01-01"),
  n_widgets = c(1,2,3,4,4,5,2,4,5)
)

   id       date n_widgets
1  1 2015-01-01         1
2  1 2015-01-01         2
3  1 2015-01-05         3
4  1 2015-01-25         4
5  1 2015-02-15         4
6  2 2015-05-05         5
7  2 2015-01-01         2
8  3 2015-08-01         4
9  4 2015-01-01         5
Run Code Online (Sandbox Code Playgroud)

我经常想知道一些关于用户的滚动统计数据.例如:对于某个特定日期的此用户,过去30天内发生的交易次数,前30天内售出的小部件数量等.

对应上面的例子,数据应如下所示:

   id     date    n_widgets  n_trans_30  total_widgets_30
1  1 2015-01-01         1           1 …
Run Code Online (Sandbox Code Playgroud)

r time-series lubridate dplyr

7
推荐指数
1
解决办法
1984
查看次数

从今天起减去1个月的R给出了NA

我有一个脚本,其中我根据一些设定的时间段对我的数据进行子集化,并希望对上个月发生的所有记录进行子集化.

但是,如果我尝试从今天的日期减去一个月,则会产生一个NA:

> today <- Sys.Date()
> today
[1] "2017-03-29"
> today - months(1)
[1] NA
Run Code Online (Sandbox Code Playgroud)

我确实已经加载了润滑剂,但我认为这个计算是用基数R执行的.如果我减去2个月或更多个月它可以正常工作:

> today - months(2)
[1] "2017-01-29"
> today - months(3)
[1] "2016-12-29"
Run Code Online (Sandbox Code Playgroud)

有没有人对可能发生的事情有任何想法?

更新:我认为这与简单的日期减法有关,不处理闰年案例(2017年不是闰年所以"2017-02-29"不存在).

是否有其他包装/功能考虑到闰年?对于上面的例子,我希望答案恢复到上个月的最后一天,即:

today - months(1)
# Should yield:
"2017-02-28"
Run Code Online (Sandbox Code Playgroud)

这个计算是否有意义为今天和昨天提供相同的结果(或者ISO的惯例是什么)?

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

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=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics …
Run Code Online (Sandbox Code Playgroud)

r date subtraction lubridate calculation

7
推荐指数
2
解决办法
5235
查看次数

lubridate 1.7.3错误:CCTZ:输入向量的无法识别的时区:""

我刚安装了最新版本的lubridate(1.7.3),我收到以下错误

> x <- as.POSIXct("2014-06-01 08:21:59 BST")
> for (j in 1:1e4){
     dum <- lubridate::force_tz(x, tzone = 'UTC')
 }
> for (j in 1:1e8){
     dum <- lubridate::force_tz(x, tzone = 'UTC')
 }
Error in C_force_tz(time, tz = tzone, roll) : 
  CCTZ: Unrecognized timezone of the input vector: ""
> j
[1] 580
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我1e4在第一个循环之后继续我没有得到它,如果我开始1e8我不明白.有任何想法吗?

timezone r lubridate

7
推荐指数
1
解决办法
434
查看次数