R:Lubridate 无法将字符转换为数字

Posted

技术标签:

【中文标题】R:Lubridate 无法将字符转换为数字【英文标题】:R: Lubridate Failing to Convert Character to Numeric 【发布时间】:2022-01-10 18:17:48 【问题描述】:

我是 R 新手 - 并在旧帖子中搜索了答案,但没有找到任何解决我问题的方法。

我以 mdy h:mm:ss 格式提取了旅行开始时间的 csv,但它目前被识别为一个字符。我试过使用mdy_hms(c("11/1/2020 0:05:00","11/1/2020 7:29:00","11/1/2020 14:04:00"))as.Date(parse_date_time(dc_biketrips$started_at, c(mdy_hms))) 无济于事。

有人对我如何解决这个问题有任何建议吗?

更新:我也尝试使用date <-mdy_hms(c("11/1/2020 0:05:00","11/1/2020 7:29:00","11/1/2020 14:04:00")) str(date)但这也没有用

attempt to use date <-mdy_hms(C("11/1/2020 0:05:00"etc

image of csv

【问题讨论】:

【参考方案1】:

一种选择是使用as.POSIXct

started_at <- c("11/1/2020 0:05:00","11/1/2020 7:29:00","11/1/2020 14:04:00")

as.POSIXct(started_at, format = "%m/%d/%Y %H:%M:%OS")
#> [1] "2020-11-01 00:05:00 CET" "2020-11-01 07:29:00 CET"
#> [3] "2020-11-01 14:04:00 CET"

编辑

library(lubridate)
library(dplyr)

started_at <- c("11/1/2020 0:05:00","11/1/2020 7:29:00","11/1/2020 14:04:00")
    as.POSIXctlubridate::mdy_hms 都返回 "POSIXct" "POSIXt" 类的对象
class(as.POSIXct(started_at, format = "%m/%d/%Y %H:%M:%OS"))
#> [1] "POSIXct" "POSIXt"
class(mdy_hms(started_at))
#> [1] "POSIXct" "POSIXt"
    不确定您的期望。当我运行您的代码时,一切正常,除了在过滤 week &lt; 15 后我们最终得到 0 obs,因为示例数据中的所有日期都来自第 44 周:
dc_biketrips <- data.frame(
  started_at
)

dc_biketrips <- dc_biketrips %>% 
  mutate(started_at = as.POSIXct(started_at, format = "%m/%d/%Y %H:%M:%OS"),
         interval60 = floor_date(started_at, unit = "hour"), 
         interval15 = floor_date(started_at, unit = "15 mins"), 
         week = week(interval60), 
         dotw = wday(interval60, label=TRUE)) 
dc_biketrips
#>            started_at          interval60          interval15 week dotw
#> 1 2020-11-01 00:05:00 2020-11-01 00:00:00 2020-11-01 00:00:00   44   So
#> 2 2020-11-01 07:29:00 2020-11-01 07:00:00 2020-11-01 07:15:00   44   So
#> 3 2020-11-01 14:04:00 2020-11-01 14:00:00 2020-11-01 14:00:00   44   So

dc_biketrips %>% 
  filter(week < 15)
#> [1] started_at interval60 interval15 week       dotw      
#> <0 rows> (or 0-length row.names)

【讨论】:

感谢@stefan 的回复!这似乎也不起作用,因为我正在尝试创建时间间隔箱 - 并且在运行以下代码时没有任何结果: Bike_20 % mutate(interval60 = floor_date(mdy_hms(started_at), unit = "hour"), interval15 = floor_date(mdy_hms(started_at), unit = "15 mins"), week = week(interval60), dotw = wday(interval60, label=TRUE)) %>% filter(week @Marie。不确定是什么问题。 as.POSIXct 和 mdy_hms 都可以正常工作。只有过滤会丢弃所有观察结果。查看我的编辑。 嗯明白了。问题已解决 - 再次感谢您!【参考方案2】:

您的两个选项中的第一个有效:

library(lubridate)
date <-mdy_hms(c("11/1/2020 0:05:00","11/1/2020 7:29:00","11/1/2020 14:04:00"))
str(date)
# POSIXct[1:3], format: "2020-11-01 00:05:00" "2020-11-01 07:29:00" "2020-11-01 14:04:00" 

您的数据是如何“提取”的?

【讨论】:

非常感谢您的回复!我用 read.csv 提取了数据。我尝试使用您的建议(请参阅上面的更新图像),尽管它似乎也不起作用,因为该列仍被归类为字符,并且当我尝试创建时间间隔箱时,我得到 0 个结果(使用 Bike_20 % mutate(interval60 = floor_date(mdy_hms(started_at), unit = "hour"), interval15 = floor_date(mdy_hms(started_at), unit = "15 mins"), week = week(interval60), dotw = wday(interval60, label=TRUE)) %>% filter(week

以上是关于R:Lubridate 无法将字符转换为数字的主要内容,如果未能解决你的问题,请参考以下文章

为啥 R lubridate::duration 数据类型使用 sparklyr 转换为 spark 中的字符?

键盘输入一个字符,要求判断是不是为数字字符

as.Date函数将字符串转化为日期as.Date指定format的格式lubridate包日期格式转换系统日期系统时间日期比较日期差lubridate包获取关系日期的详细信息

c语言中假设一个数组中已经存放若干个数字字符,编写程序,将每个数字字符转换成对应的数字后存放在另一个

实验 9 根据材料编程

R:lubridate 的 dst() 没有按预期工作