我有一个如下所示的数据框
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为-30和Inf。30
我尝试了以下情况。请注意,此案例是大型 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) 我正在编写一个使用一些lubridate函数的函数。
但是,我不确定如何%within%从 lubridate 导入该函数。通常这很容易,因为我只使用 lubridate::function 。当我使用 %within% 运算符尝试此操作时,这不起作用。有没有办法在不加载整个包的情况下使用包中的运算符?
我试图通过它不断向我显示“所有格式无法解析。未找到格式”来解析我的日期时间。
这些是我一直在尝试解析的时间和代码。
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) 这就是我想要的结果:
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) 我需要从包含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) 我不明白来自库"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)
谢谢
我有一个数字向量如下
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'.有没有其他(直接)替代方法一次将数值转换为日期?
我有一个杂乱的数据框,有两列:
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循环来做到这一点,但是,我正在寻找一个更优雅的矢量化解决方案.
你有好主意吗?
谢谢
字符串包含'YEAR WEEK',我想将其转换parse_date_time()为日期对象,但我无法使代码工作:
parse_date_time(c("201510"), "YW")
Run Code Online (Sandbox Code Playgroud)
我不必使用lubridate,也可以是其他包.
我有一个以下格式的数据框,我试图找到事件'分配'和上一次事件'创建'之前的时间差异.
**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)