我有一个因子向量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)
但这看起来并不太优雅......
提前谢谢!
答案 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"