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

R 使用空单元格将因子转换为日期,r,date,R,Date,我有一个因子向量x如下所示: "" "1992-02-13" "2011-03-10" "" "1998-11-30" > levels(x)[1] <- NA > x <- as.Date(x) 我可以将此向量转换为日期向量(使用as.date())吗 尝试显而易见的方式给了我: > x <- as.Date(x) Error in charToDate(x) : character string is not in a standard unambig

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

""
"1992-02-13"
"2011-03-10"
""
"1998-11-30"
> levels(x)[1] <- NA
> x <- as.Date(x)
我可以将此向量转换为日期向量(使用
as.date()
)吗

尝试显而易见的方式给了我:

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

>x级别(x)[1]x当您使用read.csv或其他工具拉入数据时,您可以设置

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

避免完全处理这件事

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

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

避免完全处理这件事

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

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" 

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

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
您的字符向量应该采用什么格式:

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

xd您只需告诉
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

xd+1表示间接注意as.Date()转换为字符。+1表示间接注意as.Date()转换为字符。这是一个危险的习惯,因为它可能会导致时区出现细微错误。一般来说,最好避免在日期上使用POSIXt类。@G.格罗森迪克,还有什么选择?@RL,请参阅本帖的其他答案。他们不使用POSIXt类。@G.Grothendieck,我没有意识到,
as.Date
生成了一个不同的类。我没有真正使用跨越多个时区的时间/日期,因此我没有特别注意这一点。谢谢您提出这个问题。@RL,请参阅R新闻4/1帮助台文章。这是一个危险的习惯,因为它可能会导致时区出现细微错误。一般来说,最好避免在日期上使用POSIXt类。@G.格罗森迪克,还有什么选择?@RL,请参阅本帖的其他答案。他们不使用POSIXt类。@G.Grothendieck,我没有意识到,
as.Date
生成了一个不同的类。我没有真正使用跨越多个时区的时间/日期,因此我没有特别注意这一点。谢谢您提出。@RL,请参阅R新闻4/1帮助台文章。