使用空单元格将因子转换为日期

时间:2011-07-21 08:55:25

标签: r date

我有一个因子向量x,如下所示:

""
"1992-02-13"
"2011-03-10"
""
"1998-11-30"

我可以将此向量转换为日期向量(使用as.Date())吗?

尝试以明显的方式给我:

> x <- as.Date(x)
Error in charToDate(x) :
character string is not in a standard unambiguous format

目前我解决了这个问题:

> levels(x)[1] <- NA
> x <- as.Date(x)

但这看起来并不太优雅......

提前谢谢!

3 个答案:

答案 0 :(得分:7)

您只需要告诉as.Date您的角色向量中需要什么格式:

xd <- as.Date(x, format="%Y-%m-%d")
xd
[1] NA           "1992-02-13" "2011-03-10" NA           "1998-11-30"

To illustrate that these are indeed dates:
xd[3] - xd[2]
Time difference of 6965 days

PS。无论您的数据是字符向量还是因素,使用as.Date的转换都有效。

答案 1 :(得分:2)

使用read.csv或其他人拉入数据时,可以设置

read.csv(...,na.strings=c(""))

避免完全处理这个问题。

答案 2 :(得分:1)

我通常使用函数strptime将因子转换为POSIX *类型类。第一个参数是你的向量,第二个参数是用于构造日期/时间的“模式”(%符号+特定字母)。你基本上告诉R你首先有一年,然后你有 - ,然后一个月等等。有关转换规范的完整列表,请参阅?strptime

x <- factor(c("1992-02-13", "2011-03-10", "1998-11-30"))
(x.date <- strptime(x, format = "%Y-%m-%d"))
 [1] "1992-02-13" "2011-03-10" "1998-11-30"
class(x.date)
 [1] "POSIXlt" "POSIXt" 

同样的原则适用于as.Date。你告诉R“让它成为一个日期/时间对象,以下是如何制作它的说明”。

(as.Date(x, "%Y-%m-%d"))
 [1] "1992-02-13" "2011-03-10" "1998-11-30"