【问题标题】:R lubridate as_date does not convert datetime to date [duplicate]R lubridate as_date 不会将日期时间转换为日期 [重复]
【发布时间】:2020-08-03 07:10:07
【问题描述】:

我使用 read_excel 从 Excel 中读取一个数组,得到两个日期时间列,但我需要的是两列日期

    User  DOB                 Answer_dt             Question Answer
   <chr>  <dttm>              <dttm>                   <int>  <int>
 1 User1  1900-01-01 00:00:00 2017-01-26 00:00:00        1      7
 2 User2  1900-01-01 00:00:00 2017-01-26 00:00:00        2      8

我希望将 datetime 列转换为日期(时间无关紧要),并尝试在各种组合中使用 mutate 和 lubridate,但仅成功收到我不明白的错误消息:

> library(lubridate)
> dt <- eML_daily[1, "DOB"]
> dt
# A tibble: 1 x 1
  DOB                
  <dttm>             
1 1900-01-01 00:00:00
Warning message:
`...` is not empty.

These dots only exist to allow future extensions and should be empty.
Did you misspecify an argument? 

> as_date(dt)
Error in as.Date.default(x, ...) : 
  do not know how to convert 'x' to class “Date”

> as_date(df[,"DOB"])
Error in as.Date.default(x, ...) : 
  do not know how to convert 'x' to class “Date”

我不理解警告信息,也不太明白我做错了什么。当然,从 dttm 转换为 date 并丢弃我不需要的时间应该是一件简单的事情。

我会非常感谢指针。

在此致以诚挚的谢意

托马斯·飞利浦

【问题讨论】:

  • 能否提供dput()格式的数据?请访问this。

标签: r date datetime lubridate


【解决方案1】:

在as_date(dt) 中,您正试图将小标题转换为日期时间。不出所料,这失败了。在as_date(df[,"DOB"]),我不能说你想要做什么,因为你没有给我们df。

工作示例;

library(tidyverse)
library(lubridate)

dt <- tibble(x=as_datetime("2017-01-26 00:00:00"))
dt
# A tibble: 1 x 1
  x                  
  <dttm>             
1 2017-01-26 00:00:00
dt %>% mutate(x=as_date(x))
# A tibble: 1 x 1
  x         
  <date>    
1 2017-01-26

【讨论】:

    【解决方案2】:

    您可以使用as.Date 将日期时间列转换为日期。

    如果您想将第 2 列和第 3 列更改为最新,您可以这样做。

    eML_daily[2:3] <- lapply(eML_daily[2:3], as.Date)
    

    或者dplyr:

    library(dplyr)
    eML_daily %>% mutate(across(2:3, as.Date))
    #For dplyr < 1.0.0
    #eML_daily %>% mutate_at(2:3, as.Date)
    

    【讨论】:

      【解决方案3】:

      您是否尝试过先将其转换为字符?

      这是一个简单的示例:

      x <- tibble(dt = c(Sys.time(),Sys.time() - 345767)) %>%
        mutate(dt = as_date(as.character(dt)))
      

      【讨论】:

        猜你喜欢
        • 2012-12-09
        • 2017-05-01
        • 1970-01-01
        • 2019-09-22
        • 1970-01-01
        • 2012-08-14
        • 2017-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多