使用 as.date 和 if.else 无法从时间戳中提取日期
Fail to extract the date from the timestamp by using as.date and if.else
我已经在 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。
能帮忙看看代码,哪里错了?谢谢!
你也必须指定时间。
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")
这里有两件事在起作用。
ifelse
的行为。它将 return 与
条件的长度。如果条件returns只有一个值,ifelse
return 也将是一个单一的值。
is.null
的行为与 is.na
的行为不同。与 is.na
不同,is.null(mydata$inbound_date)
是检查整体
mydata$inbound_date1
作为单个对象,你得到
return 中只有一个值,即 False
。
这两件事的综合效果是您只得到第一个项目的 as.Date
值,而且它是一个 NA
。更重要的是,这个 `NA 然后被回收以用 NA 填充整个列。
解决方案 -- 在您使用 is.null
的地方使用 is.na
。它将 return 多个值并且事情将按预期工作。
我已经在 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。
能帮忙看看代码,哪里错了?谢谢!
你也必须指定时间。
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")
这里有两件事在起作用。
ifelse
的行为。它将 return 与 条件的长度。如果条件returns只有一个值,ifelse
return 也将是一个单一的值。is.null
的行为与is.na
的行为不同。与is.na
不同,is.null(mydata$inbound_date)
是检查整体mydata$inbound_date1
作为单个对象,你得到 return 中只有一个值,即False
。
这两件事的综合效果是您只得到第一个项目的 as.Date
值,而且它是一个 NA
。更重要的是,这个 `NA 然后被回收以用 NA 填充整个列。
解决方案 -- 在您使用 is.null
的地方使用 is.na
。它将 return 多个值并且事情将按预期工作。