>我已经读取了一个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。
可以帮助查看代码,哪一部分是错误的?谢谢!
这里有两件事在起作用。
-
ifelse
的行为 .它将返回与 条件的长度。如果条件仅返回一个值,则ifelse
也将返回单个值。 -
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")