无法使用as.date和if.else从时间戳中提取日期

时间:2017-08-03 07:01:47

标签: r timestamp data-extraction

我已经在mydata中读取了一个csv文件,一个名为inbound_date的现有列包含像

这样的数据
  

NULL

     

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。

可以帮助查看代码,哪部分是错误的?谢谢!

3 个答案:

答案 0 :(得分:0)

您还必须指定时间。

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"

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这里有两件事情。

  1. ifelse的行为。它会返回尽可能多的值 条件的长度。如果条件仅返回一个值ifelse 也将返回单个值。

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

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

    解决方案 - 在使用is.na的位置使用is.null。它将返回多个值,并且该东西将按预期工作。