我遇到了日期向量的问题,我想更改日期格式我尝试了很多东西,但似乎不起作用
让我们举个例子:
library(stringr)
library(lubridate)
x <- c(NA, "40695", "40940", "01/03/2013", NA, "01/06/2011", NA, "40725",
"01/07/2011", NA)
我尝试使用替换功能来做到这一点:
x <- replace(x, str_length(x) == 5, as.Date(x, "1899-12-30"))
x <- replace(x, str_length(x) == 10, as.Date(parse_date_time(x,"dmy")))
使用 for 循环和 ifelse :
for (i in seq_along(x)){
ifelse(str_length(x[i]) == 5,
x[i] <- as.Date(x[i], "1899-12-30"),
ifelse(str_length(x[i]) == 10,
x[i] <- as.Date(parse_date_time(x[i],"dmy"))), "pas de donnees")
}
以 R 为底:
x[str_length(x) == 5] <- as.Date(x, "1899-12-30")
我收到以下错误
x[str_length(x) == 5] 中的错误<- as。日期(x, "1899-12-30") : 不适用 不允许在下标分配中
谢谢
在索引时使用 which
删除 NA。此外,使用 Date-NA 准备一个空向量,因为替换原始值不起作用(您正在尝试将向量中的字符替换为 Date)。
这工作(基础)
# empty vector with Date-class NA
z <- rep(as.Date(NA), length(x))
z[which(nchar(x) == 5)] <- as.Date(as.numeric(x[which(nchar(x) == 5)]),
origin="1899-12-30")
z[which(nchar(x) == 10)] <- as.Date(x[which(nchar(x) == 10)],
format="%d/%m/%Y")