使用R中的循环向量更改日期

时间:2017-01-13 10:49:34

标签: r

我遇到了日期向量问题,我想更改日期格式 我尝试了很多东西,但似乎没有效果

让我们举一个例子:

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]&lt; - as.Date(x,&#34; 1899-12-30&#34;):NAs   在下标作业中不允许

由于

1 个答案:

答案 0 :(得分:2)

在建立索引时使用which删除NAs。另外,准备一个带有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")