【问题标题】:Fail to extract the date from the timestamp by using as.date and if.else使用 as.date 和 if.else 无法从时间戳中提取日期
【发布时间】:2017-08-03 07:01:47
【问题描述】:

我已经读取了一个 csv 文件作为 mydata,一个名为 inbound_date 的现有列,包含类似的数据

2017-06-24 16:47:35

2017-06-24 16:47:35

我想创建一个新列来提取该列的日期。我试过下面的代码,但失败了,

mydata$inbound_day<-ifelse(is.null(mydata$inbound_date),"null",as.Date(mydata$inbound_date,format = "%Y-%m-%d"))

已添加新列 inbound_day,但在所有行的列中显示为 NA。

能帮忙看一下代码,哪一部分错了?谢谢!

【问题讨论】:

    标签: r timestamp data-extraction


    【解决方案1】:

    这里有两件事在起作用。

    1. ifelse 的行为。它将返回与 条件的长度。如果条件只返回一个值,ifelse 也将返回单个值。

    2. is.null 的行为与is.na 的行为不同。与is.na 不同,is.null(mydata$inbound_date) 正在检查整个 mydata$inbound_date1 作为单个对象,你得到 只有一个值作为回报,即False

    这两件事的综合效果是你只得到第一项的as.Date值作为结果,它是一个NA。更重要的是,这个 `NA 然后被回收以用 NA 填充整个列。

    解决方案 -- 在您使用 is.null 的地方使用 is.na。它将返回多个值,并且事情将按预期工作。

    【讨论】:

      【解决方案2】:

      您还必须指定时间。

      x <- as.POSIXlt("2017-06-24 16:47:35", format = "%Y-%m-%d %H:%M:%S")
      
      format(x, "%Y-%m-%d")
      [1] "2017-06-24"
      

      【讨论】:

        【解决方案3】:

        使用lubridate 格式化而不是 as.date 然后提取日期

        library(lubridate)
        x <- ymd_hms("2017-06-24 16:47:35")
        format(x, "%d")
        

        【讨论】:

          猜你喜欢
          • 2021-09-26
          • 1970-01-01
          • 1970-01-01
          • 2017-02-01
          • 2020-04-02
          • 1970-01-01
          • 2020-06-27
          • 2018-07-18
          相关资源
          最近更新 更多