使用R中的as.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 ... 不太明白这一切是什

我试图将数据列从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 <- 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"