标签: lubridate

R出生日期和任意日期的有效和准确的年龄计算(年,月或周)

我面临着计算出生日期和任意日期的年龄(年,月或周)的共同任务.事情是,我经常需要在许多记录(> 3亿)上执行此操作,因此性能是一个关键问题.

在SO和Google中快速搜索后,我找到了3个替代方案:

  • 常用的算术程序(/365.25)(链接)
  • 使用函数new_interval()duration()lubridate(链接)
  • age_calc()包中的功能eeptools(链接,链接,链接)

所以,这是我的玩具代码:

# Some toy birthdates
birthdate <- as.Date(c("1978-12-30", "1978-12-31", "1979-01-01", 
                       "1962-12-30", "1962-12-31", "1963-01-01", 
                       "2000-06-16", "2000-06-17", "2000-06-18", 
                       "2007-03-18", "2007-03-19", "2007-03-20", 
                       "1968-02-29", "1968-02-29", "1968-02-29"))

# Given dates to calculate the age
givendate <- as.Date(c("2015-12-31", "2015-12-31", "2015-12-31", 
                       "2015-12-31", "2015-12-31", "2015-12-31", 
                       "2050-06-17", "2050-06-17", "2050-06-17",
                       "2008-03-19", "2008-03-19", "2008-03-19", 
                       "2015-02-28", "2015-03-01", "2015-03-02"))

# Using a common arithmetic procedure ("Time differences in …
Run Code Online (Sandbox Code Playgroud)

r lubridate

15
推荐指数
4
解决办法
1万
查看次数

Lubridate week()查找多年期间的连续周数

在R中,假设我有一些Lubridate日期的向量:

> Date
"2012-01-01 UTC"
"2013-01-01 UTC"
Run Code Online (Sandbox Code Playgroud)

接下来,假设我想看看这几天的周数:

> week(Date)
1
1
Run Code Online (Sandbox Code Playgroud)

Lubridate太棒了!

但是等等......我正在处理一个包含10,000行数据的时间序列......数据跨越3年.

我一直在努力寻找实现这一目标的方法:

> result of awesome R code here
1
54
Run Code Online (Sandbox Code Playgroud)

问题是:是否有一种简洁的方法可以在Lubridate的多年内输出一周的周数列表?更直接的是,我希望第二年的第一周能够代表第54周.而第三年的第一周将作为第107周的代表,令人作呕.

到目前为止,我已经尝试了一些hackney方案,但似乎无法创造一些没有用透明胶带固定在一起的东西.任何建议将不胜感激.提前致谢.

r lubridate

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

如何展平/合并重叠的时间段

我有一个大的时间段数据集,由"开始"和"结束"列定义.有些时期重叠.

我想将所有重叠时间段组合(展平/合并/折叠)以具有一个"开始"值和一个"结束"值.

一些示例数据:

  ID      start        end
1  A 2013-01-01 2013-01-05
2  A 2013-01-01 2013-01-05
3  A 2013-01-02 2013-01-03
4  A 2013-01-04 2013-01-06
5  A 2013-01-07 2013-01-09
6  A 2013-01-08 2013-01-11
7  A 2013-01-12 2013-01-15
Run Code Online (Sandbox Code Playgroud)

期望的结果:

  ID      start        end
1  A 2013-01-01 2013-01-06
2  A 2013-01-07 2013-01-11
3  A 2013-01-12 2013-01-15
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  require(dplyr)
  data <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L), class = "factor", .Label = "A"), 
    start = structure(c(1356998400, 1356998400, 1357084800, 1357257600, 
    1357516800, 1357603200, 1357948800), tzone = …
Run Code Online (Sandbox Code Playgroud)

datetime r date lubridate

13
推荐指数
3
解决办法
2189
查看次数

计算一天中每小时发生的持续时间的一部分

我有一个带有开始和结束时间的数据框:

  id          start_time            end_time
1  1 2018-09-02 11:13:00 2018-09-02 11:54:00
2  2 2018-09-02 14:34:00 2018-09-02 14:37:00
3  3 2018-09-02 03:00:00 2018-09-02 03:30:00
4  4 2018-09-02 03:49:00 2018-09-02 03:53:00
5  5 2018-09-02 07:05:00 2018-09-02 08:05:00
6  6 2018-09-02 06:44:00 2018-09-02 06:57:00
7  7 2018-09-02 06:04:00 2018-09-02 08:34:00
8  8 2018-09-02 07:51:00 2018-09-02 08:15:00
9  9 2018-09-02 08:16:00 2018-09-02 08:55:00
Run Code Online (Sandbox Code Playgroud)

从这些时间段,我如何计算每天每小时发生的总分钟数?例如,如果一个时段从 9:45 开始并在 10:15 结束,我想将 15 分钟分配给 9:00 小时,将 15 分钟分配给 10:00 小时。

或者检查06上面数据中的小时,该小时包含在两个不同的行(句点)中:

6  6 2018-09-02 06:44:00 2018-09-02 06:57:00 …
Run Code Online (Sandbox Code Playgroud)

datetime r posixct lubridate

13
推荐指数
1
解决办法
604
查看次数

R 在 1:36:14 而不是在 2:00:00 从 PDT 切换到 PST - Lubridate 在切换前分配时区

当查看与从 PDT 到 PST 的时区更改重叠的日期时间值时,R 似乎在 1:36:14 而不是预期的 2:00:00 切换时区。具体来说,R 将 PST 时区分配给 2021-11-07 01:36:14 之后的所有日期时间(如下所示):

x <-c(
    "2021-11-07 1:00:00",
    "2021-11-07 1:00:01",
    "2021-11-07 1:35:00",
    "2021-11-07 1:36:00",
    "2021-11-07 1:36:10",
    "2021-11-07 1:36:14",
    "2021-11-07 1:36:15",
    "2021-11-07 1:36:30",
    "2021-11-07 1:36:59",
    "2021-11-07 1:45:00",
    "2021-11-07 1:59:59",
    "2021-11-07 2:00:00",
    "2021-11-07 2:30:00"
    )
x_pst <- as.POSIXct(x, tz = "PST8PDT")
> x_pst
# ...
[5] "2021-11-07 01:36:10 PDT" "2021-11-07 01:36:14 PDT"
[7] "2021-11-07 01:36:15 PST" "2021-11-07 01:36:30 PST"
# ...

Run Code Online (Sandbox Code Playgroud)

除此之外,lubridate 似乎在切换之前将所有日期时间调整为 PST(使用相同的数据):

x_pst <- lubridate::as_datetime(x, tz = "PST8PDT") …
Run Code Online (Sandbox Code Playgroud)

datetime r lubridate

13
推荐指数
1
解决办法
261
查看次数

从时间戳中提取日期的最简单方法

请考虑以下时间戳

timestamp <- ymd_hms("2011-08-10 14:00:00", tz = "Pacific/Auckland")

> timestamp
[1] "2011-08-10 14:00:00 NZST"
Run Code Online (Sandbox Code Playgroud)

什么是最简单的方法来获取它的一天2011-08-10,并确保这一天是一个正确的日期,而不是一个字符串?

使用lubridate::day(timestamp)明显失败了.

datetime r lubridate

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

为什么rubridate包中的dmy()不适用于NA?什么是好的解决方法?

我在lubridate包中偶然发现了一个奇怪的行为:dmy(NA)拖出一个错误,而不仅仅是返回一个NA.当我想转换一个包含一些元素为NA的列和一些通常转换没有问题的日期字符串时,这会导致我出现问题.

这是最小的例子:

library(lubridate)
df <- data.frame(ID=letters[1:5],
              Datum=c("01.01.1990", NA, "11.01.1990", NA, "01.02.1990"))
df_copy <- df
#Question 1: Why does dmy(NA) not return NA, but throws an error?
df$Datum <- dmy(df$Datum)
Error in function (..., sep = " ", collapse = NULL)  : invalid separator
df <- df_copy
#Question 2: What's a work around?
#1. Idea: Only convert those elements that are not NAs
#RHS works, but assigning that to the LHS doesn't work (Most likely problem::
#column …
Run Code Online (Sandbox Code Playgroud)

r lubridate

11
推荐指数
1
解决办法
3477
查看次数

增加ggplot2中日期的轴刻度数

我有一些时间序列数据要绘制,我想要更细粒度的轴刻度.例如:

library(lubridate)
library(ggplot2)
library(scales)

dat <- data.frame(date = paste0("09-01-", gsub(" ", "0", format(1:30))),
                  stringsAsFactors = FALSE)
dat$date <- ymd(dat$date)
dat$y <- rnorm(nrow(dat))

p <- ggplot(dat, aes(x = date, y = y)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

根据这篇文章,我试过了

p  + scale_x_continuous(breaks=pretty_breaks(n=10))
Run Code Online (Sandbox Code Playgroud)

但是Error: Discrete value supplied to continuous scale.关于如何做到这一点的任何想法?

R Under development (unstable) (2014-12-29 r67265)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
Running under: OS X 10.9.5 (Mavericks)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

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

other attached packages: …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 lubridate

11
推荐指数
1
解决办法
7068
查看次数

与lubridate的年份时差?

我想用它lubridate来计算出生日期和今天的日期.现在我有这个:

library(lubridate)
today<-mdy(08312015)
dob<-mdy(09071982)
today-dob
Run Code Online (Sandbox Code Playgroud)

这给了我他们几天的年龄.

r lubridate

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

dplyr,lubridate:如何按周汇总数据框?

请考虑以下示例

library(tidyverse)
library(lubridate)
time <- seq(from =ymd("2014-02-24"),to= ymd("2014-03-20"), by="days")
set.seed(123)
values <- sample(seq(from = 20, to = 50, by = 5), size = length(time), replace = TRUE)
df2 <- data_frame(time, values)
df2 <- df2 %>% mutate(day_of_week = wday(time, label = TRUE))

Source: local data frame [25 x 3]

         time values day_of_week
       <date>  <dbl>      <fctr>
1  2014-02-24     30         Mon
2  2014-02-25     45        Tues
3  2014-02-26     30         Wed
4  2014-02-27     50       Thurs
5  2014-02-28     50         Fri
6  2014-03-01     20         Sat
7  2014-03-02 …
Run Code Online (Sandbox Code Playgroud)

r xts lubridate dplyr

11
推荐指数
3
解决办法
9737
查看次数

标签 统计

lubridate ×10

r ×10

datetime ×4

date ×1

dplyr ×1

ggplot2 ×1

posixct ×1

xts ×1