我已经在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。
可以帮助查看代码,哪部分是错误的?谢谢!
答案 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)
这里有两件事情。
ifelse
的行为。它会返回尽可能多的值
条件的长度。如果条件仅返回一个值ifelse
也将返回单个值。
is.null
的行为与is.na
的行为不同。与is.na
不同,is.null(mydata$inbound_date)
正在检查整体
mydata$inbound_date1
作为单个对象而你正在获得
只返回一个值,即False
。
这两件事的综合效果是,您只得到第一项的as.Date
值作为结果,而且它是一个NA
。更重要的是,这个`NA然后被回收用NAs填充整个专栏。
解决方案 - 在使用is.na
的位置使用is.null
。它将返回多个值,并且该东西将按预期工作。