【问题标题】:How to use mutate() with a Date_Time month/Day/Year 00:00 in R如何在 R 中将 mutate() 与 Date_Time 月/日/年 00:00 一起使用
【发布时间】:2020-02-12 07:10:44
【问题描述】:

我在 mutate 方面遇到了问题,并且正在做一个案例。

这就是我的数据在此日期和时间在一列中的样子

       Date_Time 
1   1/23/2020 20:41
2   1/23/2020 10:54
3   1/23/2020 23:55
4   1/23/2020 20:34
5   1/23/2020 20:23
6   1/23/2020 10:26
7   1/23/2020 8:43
8   1/23/2020 7:57
9   1/24/2020 0:32
10  1/24/2020 0:40
11  1/23/2020 20:19
12  1/23/2020 20:53
13  1/24/2020 0:46

我想创建一个列来分类日期和时间是否在一天中的某个时间范围内

我试过了

y <- x %>% mutate(Period = case_when(Date_Time >= '1/23/2020 00:01' & Date_Time <= '1/23/2020 17:00' ~ 'A',
                                                                     Date_Time >= '1/23/2020 17:01' & Date_Time <= '1/23/2020 21:59' ~ 'B',
                                                                     Date_Time >= '1/23/2020 22:00' ~ 'C'
))



但是 seomthing 是错误的,因为一些应该属于 B 的列被记录为 C。

这样做的正确逻辑是什么?

我想要的是

If Date_Time falls within 1/23/2020 00:01 & 1/23/2020 17:00 then its A
If Date_Time falls within 1/23/2020 17:01 & 1/23/2020 21:59 then its B
If Date_Time falls after 1/23/2020 22:00 then its C

【问题讨论】:

  • 看起来你在比较字符串,而不是日期时间

标签: r dplyr


【解决方案1】:

你需要先强制类"POSIXct",然后变异。

library(dplyr)

x$Date_Time <- as.POSIXct(x$Date_Time, format = "%m/%d/%Y %H:%M")

dt1 <- as.POSIXct('1/23/2020 00:01', format = '%m/%d/%Y %H:%M')
dt2 <- as.POSIXct('1/23/2020 17:00', format = '%m/%d/%Y %H:%M')
dt3 <- as.POSIXct('1/23/2020 17:01', format = '%m/%d/%Y %H:%M')
dt4 <- as.POSIXct('1/23/2020 21:59', format = '%m/%d/%Y %H:%M')
dt5 <- as.POSIXct('1/23/2020 22:00', format = '%m/%d/%Y %H:%M')

y <- x %>% 
  mutate(Period = case_when(Date_Time >= dt1 & Date_Time <= dt2 ~ 'A',
                            Date_Time >= dt3 & Date_Time <= dt4 ~ 'B',
                            Date_Time >= dt5 ~ 'C',
                            TRUE ~ NA_character_
  ))

y
#             Date_Time Period
#1  2020-01-23 20:41:00      B
#2  2020-01-23 10:54:00      A
#3  2020-01-23 23:55:00      C
#4  2020-01-23 20:34:00      B
#5  2020-01-23 20:23:00      B
#6  2020-01-23 10:26:00      A
#7  2020-01-23 08:43:00      A
#8  2020-01-23 07:57:00      A
#9  2020-01-24 00:32:00      C
#10 2020-01-24 00:40:00      C
#11 2020-01-23 20:19:00      B
#12 2020-01-23 20:53:00      B
#13 2020-01-24 00:46:00      C

【讨论】:

  • 我收到一个错误,as.POSIXlt.character(x, tz, ...) 中的错误:字符串不是标准的明确格式
  • @FruityPebblePug 对不起,我的错。我忘记包含将x$Date_Time 强制转换为"POSIXct" 的代码行。立即查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2020-12-03
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多