标签: lubridate

R时间段重叠

使用R中的"lubridate"包,我可以看出两个时间段是否重叠.但有没有一种有效的方法来计算它们重叠的天数.(例如,女性在怀孕期间吸烟的天数.怀孕期和吸烟期可能完全重叠,部分或完全不重叠)

以下是三位女性的例子:

preg_start<-as.Date(c("2011-01-01","2012-01-01","2013-01-01"))
preg_end<-preg_start+270 # end after 9 months
smoke_start<-as.Date(c("2011-02-01","2012-08-01","2014-01-01"))
smoke_end<-smoke_start+100 # all three smoked 100 days

data<-data.frame(cbind(preg_start,preg_end,smoke_start,smoke_end))
Run Code Online (Sandbox Code Playgroud)

我想添加一个变量,说第一个女人在怀孕期间吸烟100天,第二个吸烟30天,第三个怀孕时不吸烟.

r overlap period lubridate

5
推荐指数
1
解决办法
5333
查看次数

从开始和结束时间之间的间隔计算的R组变量

我有一个数据框如下

tmpdf <- data.frame(licensePlate = c("Y80901", "Y80901", "Y80901", "AMG-999", "AMG-999", "W3188", "W3188"),  
starttime= c("2015-09-18 09:55", "2015-09-18 23:00", "2015-09-20 15:00", "2015-09-17 15:42", "2015-09-21 09:22", "2015-09-17 09:00", "2015-09-21 14:00"),
endtime = c("2015-09-18 17:55", "2015-09-20 11:00", "2015-09-21 12:00",  "2015-09-18 13:00",  "2015-09-21 14:22", "2015-09-21 12:00", "2015-09-21 16:00"))
    tmpdf
      licensePlate        starttime          endtime
    1       Y80901 2015-09-18 09:55 2015-09-18 17:55
    2       Y80901 2015-09-18 23:00 2015-09-20 11:00
    3       Y80901 2015-09-20 15:00 2015-09-21 12:00
    4      AMG-999 2015-09-17 15:42 2015-09-18 13:00
    5      AMG-999 2015-09-21 09:22 2015-09-21 14:22
    6        W3188 2015-09-17 …
Run Code Online (Sandbox Code Playgroud)

r lubridate dplyr data.table

5
推荐指数
1
解决办法
514
查看次数

检查 Posixct 时间是否在间隔内

问题:我有两个数据帧,我想根据一个数据帧在另一个数据帧的间隔中的日期/时间来合并。

流量:日期和时间 (Posixct)、频率

mydata:间隔、频率总和

我现在想计算流量的 Posixct 时间是否在 mydata 的间隔内,如果这是 TRUE,我想计算 mydata 中“频率总和”列中的频率。

我遇到的两个问题: 1. 流量数据框的行数明显多于 mydata。我不知道如何告诉 R 循环遍历流量中的每个观察结果以检查 mydata 中的一行。

  1. mydata 的频率间隔中可以有多个观测值拟合。我希望 R 将不同交通观测的所有频率相加,以获得频率总分。而且间隔是重叠的。

这是数据:

DateTime <- c("2014-11-01 04:00:00", "2014-11-01 04:03:00",  "2014-11-01 04:06:00", "2014-11-01 04:08:00", "2014-11-01 04:10:00", "2014-11-01 04:12:00", "2015-08-01 04:13:00", "2015-08-01 04:45:00", "2015-08-01 14:15:00", "2015-08-01 14:13:00")
DateTime <- as.POSIXct(DateTime)
Frequency <- c(1,2,3,5,12,1,2,2,1,1)                 
traffic <- data.frame(DateTime, Frequency)

library(lubridate)
DateTime1 <- c("2014-11-01 04:00:00", "2015-08-01 04:03:00",  "2015-08-01 14:00:00")
DateTime2 <- c("2014-11-01 04:15:00", "2015-08-01 04:13:00",  "2015-08-01 14:15:00")
DateTime1 <- as.POSIXct(DateTime1)
DateTime2 <- as.POSIXct(DateTime2) …
Run Code Online (Sandbox Code Playgroud)

r count intervals lubridate

5
推荐指数
1
解决办法
3717
查看次数

使用ggplot2绘制时间序列数据

我正在做一个项目,需要使用 ggplot2 来绘制时间序列数据。这是我正在使用的数据集:

欧元

这就是我现在所做的:

library(ggplot2)
library(lubridate)
eur$Date <- as.Date(eur$Date)
ggplot(eur, aes(Date, EUR)) + geom_line()
Run Code Online (Sandbox Code Playgroud)

阴谋

我得到了这个非常奇怪的情节。有人可以帮我解决这个问题吗?

r time-series ggplot2 lubridate

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

检查日期是否在R的间隔内

我定义了这三个区间:

YEAR_1  <- interval(ymd('2002-09-01'), ymd('2003-08-31'))
YEAR_2  <- interval(ymd('2003-09-01'), ymd('2004-08-31')) 
YEAR_3  <- interval(ymd('2004-09-01'), ymd('2005-08-31'))
Run Code Online (Sandbox Code Playgroud)

(在现实生活中,我有50个)

我有一个数据df框(称为),其中一列充满了rubridate格式的日期.

我想添加一个df具有适当值的新列YEAR_n,具体取决于日期所在的时间间隔.

就像是:

df$YR <- ifelse(df$DATE %within% YEAR_1, 1, NA)
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么办.我需要以某种方式使用apply我认为?

这是我的数据帧:

structure(c(1055289600, 1092182400, 1086220800, 1074556800, 1109289600, 
1041897600, 1069200000, 1047427200, 1072656000, 1048636800, 1092873600, 
1090195200, 1051574400, 1052179200, 1130371200, 1242777600, 1140652800, 
1137974400, 1045526400, 1111104000, 1073952000, 1052870400, 1087948800, 
1053993600, 1039564800, 1141603200, 1074038400, 1105315200, 1060560000, 
1072051200, 1046217600, 1107129600, 1088553600, 1071619200, 1115596800, 
1050364800, 1147046400, 1083628800, 1056412800, 1159747200, 1087257600, 
1201478400, 1120521600, 1066176000, 1034553600, 1057622400, …
Run Code Online (Sandbox Code Playgroud)

r lubridate

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

data.table 中的区间类

我的问题将在以下可重现的示例中得到解释。

首先,让我们加载所需的包并创建一个POSIXct和一个data.table对象。

library(data.table)
library(lubridate)

target_date <- ymd(20180601, tz='America/Montreal')

test <- data.table(
  V1 = seq(1:3),
  V2 = c(ymd(20170421, tz='America/Montreal'),
         ymd(20170702, tz='America/Montreal'),
         ymd(20180113, tz='America/Montreal'))
)
Run Code Online (Sandbox Code Playgroud)

正如我们在下面看到的,一切工作正常。

test[]

##     V1         V2
##  1:  1 2017-04-21
##  2:  2 2017-07-02
##  3:  3 2018-01-13
Run Code Online (Sandbox Code Playgroud)

然后,我创建一个包含Interval对象的新列。

test[, V3:=interval(V2, target_date)]
Run Code Online (Sandbox Code Playgroud)

还在那里,一切都还好。

test[]

##     V1         V2                             V3
##  1:  1 2017-04-21 2017-04-21 EDT--2018-06-01 EDT
##  2:  2 2017-07-02 2017-07-02 EDT--2018-06-01 EDT
##  3:  3 2018-01-13 2018-01-13 EST--2018-06-01 EDT
Run Code Online (Sandbox Code Playgroud)

然后,我想创建两个新列,它们仅在前两行上定义:第一个是列的函数POSIXct,第二个是列的函数 …

r lubridate data.table

5
推荐指数
1
解决办法
387
查看次数

填充日期时间序列

我有一个由 ID、日期时间和值组成的 data.frame。对于每个 ID,我想扩展日期时间,以便在最小值和最大值之间每小时有一个。ID 和Value 列应填写各自的值(即不是NA)。永远不会出现每个 ID 有多个唯一 Value 值的情况。例如,新的 data.frame 应有 4 行 ID == 1 和 5 行 ID == 2(总共 9 行)。最简单的方法是什么?

我通常使用 dplyr,因此将接受 base 或 dplyr/tidyverse 方法

library(dplyr)
library(lubridate)

dt <- Sys.time() %>% floor_date('hours')
df <- data.frame(ID = c(1, 1, 2, 2), 
                 DateTime = c(dt, dt + hours(3), dt + hours(6), dt + hours(9)),
                 Value = c(3, 3, 4, 4))
Run Code Online (Sandbox Code Playgroud)

预期输出是:

output <- data.frame(ID = c(1, 1, 1, 1, 2, 2, 2, 2), 
                     DateTime = c(dt, …
Run Code Online (Sandbox Code Playgroud)

r seq posixct lubridate dplyr

5
推荐指数
1
解决办法
748
查看次数

查找具有 NA 值的 POSIXct 日期的最小值或最大值

下面的数据包含单个 ID 的列(具有重复观察)DateFate

         ID       Date  Fate
1  BHS_1149 2017-04-11   MIA
2  BHS_1154       <NA>  <NA>
3  BHS_1155       <NA>  <NA>
4  BHS_1156       <NA>  <NA>
5  BHS_1157       <NA>  Mort
6  BHS_1159 2017-04-11 Alive
7  BHS_1169 2017-04-11 Alive
8  BHS_1259       <NA>  <NA>
9  BHS_1260       <NA>  <NA>
10 BHS_1262 2017-04-11   MIA
11 BHS_1262 2017-07-05 Alive
12 BHS_1262 2017-12-06 Alive
13 BHS_1262 2017-12-06   MIA
14 BHS_1262 2018-01-17  Mort
Run Code Online (Sandbox Code Playgroud)

对于每个 ID,我想创建一个新列来表示活动时的最小值Date或最大值。如果在下面的代码中包含和排除参数,我尝试了不同的组合,但仍然收到以下警告。DateFatena.rm = T

library(tidyverse)
library(lubridate)

dat %>% 
  group_by(ID) …
Run Code Online (Sandbox Code Playgroud)

r max min lubridate dplyr

5
推荐指数
1
解决办法
2449
查看次数

解析复杂的日期列

我有一个日期列,其中包含民意调查发生的日期.

这些民意调查偶尔会持续数天(通常但并非总是连续),民意调查有时会在一个月内开始,然后在下一个阶段结束,而且这一年有时会被输入YY,其他时间则被输入为YYYY.

在有日期范围的情况下,通常使用 - ,但有时 - 已经分开,有时在某个范围内的日期之间有空格.

我需要使用start_date和end_date列将其清除为一致的日期格式.如果民意调查发生在一天,那么end_date列应该是NA或填充开始日期(如果你有一个解决方案,我可以随时在那里工作,如果需要的话).如果存在非连续日期范围,则可以丢弃最早的日期和最新日期以及中间停止和重新启动.

因为格式是如此恼人地不一致我提供了完整的数据,因为任何解决方案都需要在日期集中的所有日期工作(或者对其中一些日期工作而不是打破其他日期以便我们可以迭代地解决问题).

dates <- c("12-15 Feb 2019", "6–11 Feb 2019", "7–10 Feb 2019", "23–30 Jan 2019", 
"24–27 Jan 2019", "9–13 Jan 2019", "13-16 Dec 2018", "13–15 Dec 2018", 
"6–9 Dec 2018", "29 Nov – 2 Dec 2018", "23–25 Nov 2018", "15-18 Nov 2018", 
"15–17 Nov 2018", "8–11 Nov 2018", "1–4 Nov 2018", "25–28 Oct 2018", 
"19–21 Oct 2018", "10–13 Oct 2018", "10–13 Oct 2018", "5–7 Oct 2018", 
"22–24 Sep 2018", "20–23 Sep 2018", …
Run Code Online (Sandbox Code Playgroud)

r date lubridate

5
推荐指数
1
解决办法
157
查看次数

使用 as.Date 和 as_date 将 `dttm` 转换为 `date` 格式在 R 中给出不同的结果

我有一个大型数据集,其中包含事件时间和日期的各个列。我最终创建了一个dttm包含时间和日期的主对象,但当我尝试根据日期进行过滤时遇到了麻烦。这是一个反映我自己的示例数据集:

library(tidyverse)

d<- structure(list(date = structure(c(1530921600, 1531008000, 
1530403200, 1530489600, 1530576000, 1530489600, 1530576000, 1531008000, 
1530921600, 1530662400, 1530748800, 1531180800, 1530748800, 1531526400, 
1531526400, 1532044800, 1532131200, 1531180800, 1531353600, 1531353600
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), date_time = structure(c(1531019100, 
1531117500, 1530440640, 1530562440, 1530633240, 1530571920, 1530648900, 
1531037100, 1531010460, 1530717240, 1530808200, 1531237020, 1530813000, 
1531614060, 1531637640, 1532104320, 1532195220, 1531290120, 1531434300, 
1531409280), class = c("POSIXct", "POSIXt"), tzone = "")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -20L))
Run Code Online (Sandbox Code Playgroud)

数据如下:

# A tibble: 20 x 2 …
Run Code Online (Sandbox Code Playgroud)

r lubridate tidyverse

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

标签 统计

lubridate ×10

r ×10

dplyr ×3

data.table ×2

count ×1

date ×1

ggplot2 ×1

intervals ×1

max ×1

min ×1

overlap ×1

period ×1

posixct ×1

seq ×1

tidyverse ×1

time-series ×1