使用R中的as.date转换日期因子
我试图将数据列从factors转换为date格式,但总会出现一些问题。原始日期列如下所示:使用R中的as.date转换日期因子,r,R,我试图将数据列从factors转换为date格式,但总会出现一些问题。原始日期列如下所示: date 1/01/2008 1/01/2008 1/01/2008 1/01/2008 1/01/2008 看看它的前6行 head(PowerConsumption) 它表明: $ Date: Factor w/ 729 levels "1/01/2007","1/01/2008",..: 189 189 189 189 189 189 189 189 189 189 ... 不太明白这一切是什
date
1/01/2008
1/01/2008
1/01/2008
1/01/2008
1/01/2008
看看它的前6行
head(PowerConsumption)
它表明:
$ Date: Factor w/ 729 levels "1/01/2007","1/01/2008",..: 189 189 189 189 189 189 189 189 189 189 ...
date <- as.Date(PowerConsumption$Date, format = "%d%m%Y")
date首先,所有这些189
的意思是向量从该因子变量的第189个级别的值开始。一个简化的例子:
> x <- factor(c("1/01/2007","1/01/2008","1/01/2007","1/01/2008"))
> str(x)
Factor w/ 2 levels "1/01/2007","1/01/2008": 1 2 1 2
与我在评论中所说的相反,这种因子变量不一定需要先用as.character
转换为character
将因子值转换为日期的另一个选项是使用新的anytime
软件包中的anydate
功能:
> library(anytime)
> anydate(x)
[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01"
当然,有一种lubridate
解决方案:
x <- factor(c("1/01/2007","1/01/2008","1/01/2007","1/01/2008"))
dmy(x)
#[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01"
x必须首先将其转换为字符向量。尝试将powerconsumpion$Date
包装为as.character
:as.Date(as.character(powerconsumpion$Date),format=“%d%m%Y”)
您能否尝试使用stringsAsFactors=FALSE
参数读入/创建原始的powerconsumpion
数据框,以避免将来出现这种情况。它通过添加“/”来工作。谢谢感谢您的评论h2rm4n。然而,我不明白为什么它只从189开始。我在本专栏中没有任何NAs…@Sunshine,这是因为第一个日期都是相同的,并且您有188个日期早于2008-01-01
。为了获得一个想法,请检查as.integer(powerconsumpion$Date)
@Sunshine的输出。我还为anytime
软件包添加了一个替代方案。这个看起来非常简单!我也要试试。谢谢
x <- factor(c("1/01/2007","1/01/2008","1/01/2007","1/01/2008"))
dmy(x)
#[1] "2007-01-01" "2008-01-01" "2007-01-01" "2008-01-01"