我导入了一个要在R中处理的凌乱的电子表格。有一个日期字段,该字段可能会以三种方式出现(在任何位置以任何顺序显示):
ddt <- "2018-01-01"
; ddn <- 43101
; dde <- "43102"
以下功能将自动检测并将这三种格式转换为所需的“%YY-%m-%d”:
coerce.Date <- function (date, origin = "1900-01-01", format = "%Y-%m-%d"){
out <- ifelse(is.na(as.numeric(date)),date,as.numeric(date))
as.Date(out,origin = origin, format = format)
}
因此:
dd <- c(ddt,ddn,dde)
dates <- lapply(dd,coerce.Date)
str(dates)
List of 3
$ : Date[1:1], format: "2018-01-01"
$ : Date[1:1], format: "2018-01-04"
$ : Date[1:1], format: "2018-01-03"
太好了。但是,回到向量时,它会给我:
unlist(dates)
[1] 17532 17535 17534
我得到的解决方法是:
dates <- tibble(dates)
unnest (dates)
# A tibble: 3 x 1
dates
<date>
1 2018-01-01
2 2018-01-04
3 2018-01-03
有没有更简单的方法?
PS:我也尝试过sapply
,但结果却更加令人困惑
答案 0 :(得分:1)
只需再次添加类,这也可以避免出现警告:
ddt <- "2018-01-01"
ddn <- 43101
dde <- "43102"
dd <- c(ddt,ddn,dde)
coerce.Date <- function (dateVar, origin = "1900-01-01", format = "%Y-%m-%d"){
if(!identical(grep("^[[:digit:]]*$", dateVar), integer(0))){
out <- as.Date(as.numeric(dateVar),origin = origin, format = format)
} else {
out <- as.Date(dateVar, origin = origin, format = format)
}
return(out)
}
myDates <- lapply(dd, coerce.Date)
class(myDates) <- "Date"
myDates