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



>我已经读取了一个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。

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

这里有两件事在起作用。

  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。它将返回多个值,并且该事物将按预期工作。

您还必须指定时间。

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"

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

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

最新更新