标签: lubridate

无法使用 R 将 Inf 替换为 dplyr 链中的自定义值

我有一个如下所示的数据框

  identifier shift_back_max shift_forward_max
  <chr>               <dbl>             <dbl>
1 11                   -140                 0
2 12                    -63               149
3 13                    -37               327
4 14                      0               193
5 16                   -Inf               Inf
6 17                   -Inf               Inf
7 18                   -Inf               Inf
8 19                   -Inf               Inf
Run Code Online (Sandbox Code Playgroud)

我正在尝试替换-inf-30Inf30

我尝试了以下情况。请注意,此案例是大型 dplyr 链的一部分。但只有这一行会引发错误。所以,我在这里为一栏提供它

mutate(shift_back_max= case_when(
    (!is.na(shift_back_max)|!is.infinite(shift_back_max) ~'-30',
    TRUE ~ shift_back_max))
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息

Error: Problem with `mutate()` input `shift_back_max`.
x 'from' must be a finite number
i Input `shift_back_max` is `case_when(...)`.
i The error occurred …
Run Code Online (Sandbox Code Playgroud)

r dataframe lubridate dplyr tidyr

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

R 使用 %within% 运算符而不调用库(lubridate)

我正在编写一个使用一些lubridate函数的函数。

但是,我不确定如何%within%从 lubridate 导入该函数。通常这很容易,因为我只使用 lubridate::function 。当我使用 %within% 运算符尝试此操作时,这不起作用。有没有办法在不加载整个包的情况下使用包中的运算符?

r lubridate

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

在 R Lubridate 中解析我的日期时间时出现问题

我试图通过它不断向我显示“所有格式无法解析。未找到格式”来解析我的日期时间。

这些是我一直在尝试解析的时间和代码。

datetime_clean <- c("4:10 pm Sept 18, 2021", "12:06 pm Sept 18, 2021", "9:42 am Sept 18, 2021")

datetime_parse <- parse_date_time(
  datetime_clean, "%I:%M %p %m/%d/%Y" 
)
Run Code Online (Sandbox Code Playgroud)

r lubridate

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

按月生成日期序列

这就是我想要的结果:

library(lubridate)

res <- structure(
  c(
    16160, 16251, 16343, 16435, 16525, 16616, 16708, 
    16800, 16891, 16982, 17074, 17166, 17256, 17347, 17439, 17531, 
    17621, 17712, 17804, 17896, 17986, 18077, 18169, 18261, 18352, 
    18443, 18535, 18627, 18717, 18808, 18900
  ), 
  class = "Date"
)

res
#>  [1] "2014-03-31" "2014-06-30" "2014-09-30" "2014-12-31" "2015-03-31"
#>  [6] "2015-06-30" "2015-09-30" "2015-12-31" "2016-03-31" "2016-06-30"
#> [11] "2016-09-30" "2016-12-31" "2017-03-31" "2017-06-30" "2017-09-30"
#> [16] "2017-12-31" "2018-03-31" "2018-06-30" "2018-09-30" "2018-12-31"
#> [21] "2019-03-31" "2019-06-30" "2019-09-30" "2019-12-31" "2020-03-31"
#> [26] …
Run Code Online (Sandbox Code Playgroud)

r lubridate

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

格式为YYYY-MM-DD的分割列HH:MM:SS到两个(日期对象)列YYYY-MM-DD和HH:MM:SS在R中

我需要从包含2012-09-27 07:05:59time形式列的data.frame中分隔时间和日期.然后我必须使用和列来提取特定日期/时间的数据.我该怎么做呢?也许我想反过来这个.datetime

我尝试使用strptime函数和lubridate包但无法使其工作.

data1 <- structure(list(event.date = structure(list(sec = c(59, 29, 59, 
0, 29, 59, 29, 29, 59, 59), min = c(5L, 7L, 15L, 17L, 17L, 19L, 
21L, 22L, 22L, 23L), hour = c(7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L), mday = c(27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 
27L), mon = c(8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), year = …
Run Code Online (Sandbox Code Playgroud)

datetime r date lubridate

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

没有指定格式的日期转换

我不明白来自库"lubridate"的"ymd"函数如何在R中工作.我正在尝试构建一个能够正确转换日期而无需指定格式的功能.我正在检查由于dmy(),mdy()和ymd()函数而发生的最小NA数.

所以ymd()有时会给出NA,有时不会给出相同的Date值.R中是否有其他功能或包,这将帮助我克服这个问题.

> data$DTTM[1:5]
[1] "4-Sep-06"  "27-Oct-06" "8-Jan-07"  "28-Jan-07" "5-Jan-07" 

> ymd(data$DTTM[1])
[1] NA
Warning message:
All formats failed to parse. No formats found. 
> ymd(data$DTTM[2])
[1] "2027-10-06 UTC"
> ymd(data$DTTM[3])
[1] NA
Warning message:
All formats failed to parse. No formats found. 
> ymd(data$DTTM[4])
[1] "2028-01-07 UTC"
> ymd(data$DTTM[5])
[1] NA
Warning message:
All formats failed to parse. No formats found. 
> 

> ymd(data$DTTM[1:5])
[1] "2004-09-06 UTC" "2027-10-06 UTC" "2008-01-07 UTC" "2028-01-07 UTC"
[5] "2005-01-07 UTC"
Run Code Online (Sandbox Code Playgroud)

谢谢

datetime r date-conversion lubridate

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

将数值转换为日期

我有一个数字向量如下

aa <- c(1022011, 2022011, 13022011, 23022011) (this vector is just a sample, it is very long)
Run Code Online (Sandbox Code Playgroud)

值的编写方式是第一个值是日,然后是月,然后是年.

我现在正在做的是

as.Date(as.character(aa), %d%m%Y")
Run Code Online (Sandbox Code Playgroud)

但,

在单位数日期数的情况下,它会导致问题(返回NA).(即1022011,2022011).

所以基本上

as.Date("1022011", "%d%m%Y") does not work
Run Code Online (Sandbox Code Playgroud)

as.Date("01022011", "%d%m%Y")  (pasting '0' ahead of the number) works. 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想避免粘贴'0'.有没有其他(直接)替代方法一次将数值转换为日期?

datetime r date zoo lubridate

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

在日期R数据框中转换不同的字符串类型

我有一个杂乱的数据框,有两列:

DF<-data.frame(x=seq(100,105,1),y=c("3/25/2014 12:56","3/25/2014 14:18","3/25/2014 14:18","3/25/2014 14:18","3/25/2014 14:18","2014-03-25 14:19:08.043"))

    x                       y
1 100         3/25/2014 12:56
2 101         3/25/2014 14:18
3 102         3/25/2014 14:18
4 103         3/25/2014 14:18
5 104         3/25/2014 14:18
6 105 2014-03-25 14:19:08.043
Run Code Online (Sandbox Code Playgroud)

我想将y列转换为R日期,以便:

    x                  y
1 100         2014-03-25
2 101         2014-03-25
3 102         2014-03-25
4 103         2014-03-25
5 104         2014-03-25
6 105         2014-03-25
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我可以使用Lubridate的函数parse_date_time作为前5个元素

as.Date(parse_date_time(DF$y[1:5], orders="mdy hm"))
Run Code Online (Sandbox Code Playgroud)

并直接将函数as.Date用于最后一个:

as.Date(DF$y[6], orders="mdy hm")
Run Code Online (Sandbox Code Playgroud)

我可以通过创建一个for和if循环来做到这一点,但是,我正在寻找一个更优雅的矢量化解决方案.

你有好主意吗?

谢谢

datetime r date lubridate

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

转换年/周至日期对象

字符串包含'YEAR WEEK',我想将其转换parse_date_time()为日期对象,但我无法使代码工作:

parse_date_time(c("201510"), "YW")
Run Code Online (Sandbox Code Playgroud)

我不必使用lubridate,也可以是其他包.

r date lubridate

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

dplyr行之间的时间差异

我有一个以下格式的数据框,我试图找到事件'分配'和上一次事件'创建'之前的时间差异.

**AccountID**              **TIME**                    **EVENT**
1                      2016-11-08T01:54:15.000Z        CREATED
1                      2016-11-09T01:54:15.000Z        ASSIGNED
1                      2016-11-10T01:54:15.000Z        CREATED
1                      2016-11-11T01:54:15.000Z        CALLED
1                      2016-11-12T01:54:15.000Z        ASSIGNED
1                      2016-11-12T01:54:15.000Z        SLEEP
Run Code Online (Sandbox Code Playgroud)

目前我的代码如下,我的难点是在ASSIGNED事件之前选择CREATED

test <- timetable.filter %>%
  group_by(AccountID) %>%
  mutate(timeToAssign = ifelse(EVENT == 'ASSIGNED', 
                                interval(ymd_hms(TIME), max(ymd_hms(TIME[EVENT == 'CREATED']))) %/% hours(1), NA))
Run Code Online (Sandbox Code Playgroud)

我正在寻找输出

**AccountID**              **TIME**                    **EVENT**        **timeToAssign**
1                      2016-11-08T01:54:15.000Z        CREATED         NA
1                      2016-11-09T01:54:15.000Z        ASSIGNED         12
1                      2016-11-10T01:54:15.000Z        CREATED         NA
1                      2016-11-11T01:54:15.000Z        CALLED         NA
1                      2016-11-12T01:54:15.000Z        ASSIGNED         24
1                      2016-11-12T01:54:15.000Z        SLEEP         NA
Run Code Online (Sandbox Code Playgroud)

r lubridate dplyr

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

标签 统计

lubridate ×10

r ×10

date ×4

datetime ×4

dplyr ×2

dataframe ×1

date-conversion ×1

tidyr ×1

zoo ×1