【问题标题】:error in function for converting integer to date format in r, error: "do not know how to convert '.' to class “Date”"r中将整数转换为日期格式的函数出错,错误:“不知道如何转换'。'上课“日期””
【发布时间】:2020-04-09 09:58:05
【问题描述】:

我是 R 新手,无法通过谷歌搜索找到解决方案,所以我们开始吧:

我有一个包含许多列的数据框。其中两个有日期。一列为character,另一列为integer64。两列中的值都类似于“201802171254”。所以它们的格式为Y%m%d%H%M。我想使用函数将它们转换为日期格式。在此之前,我尝试了以下两行:

df$column_character <- as.Date(as.character(c(df$column_character)), format = '%Y%m%d%H%M')

df$column_integer64 <- as.Date(as.character(c(df$column_integer64)), format = '%Y%m%d%H%M')

我知道,这不是最优的,但它们有效。我得到了两列的日期格式。所以我试图将代码放入一个函数中:

date_format <- function(df, col){
  col_q = enquo(col)

df %>%

base::as.Date(as.character(c(!!col_q), na.rm = TRUE), format = '%Y%m%d%H%M')

}

date_format(df$column_character)

date_format(df$column_integer64)

这有效,但仅适用于第一个,character 列。 对于integer64 列,我收到错误消息:

Error in as.Date.default(., as.character(c(!!col_q), na.rm = TRUE), format = "%Y%m%d%H%M") : 
  do not know how to convert '.' to class “Date” 

这让我很困惑,因为如果我完全期望字符列会遇到困难,因为在代码中我有一个不必要的步骤(在将其转换为日期之前将其转换为字符,但它已经是字符)。

我的错误在哪里?为什么没有这个功能它可以工作,但我尝试将它用作模板,它的一半不再工作了?

提前感谢您的回答

【问题讨论】:

    标签: r date integer character


    【解决方案1】:

    无法准确告诉您,为什么该功能首先起作用。但是,我认为您的功能没有很好地指定或混乱。如果您想使用 tidy eval,请查看我的函数 date_format_new。但是,在我看来,有一种更简单的方法来设置该函数,我将其编码为date_format_simple

    library(dplyr)
    
    df <- data.frame(
      column_character = "201802171254",
      column_integer64 = 201802171254,
      stringsAsFactors = FALSE
    )
    
    date_format <- function(df, col){
      col_q = enquo(col)
    
      df %>%
        base::as.Date(as.character(c(!!col_q), na.rm = TRUE), format = '%Y%m%d%H%M')
    }
    
    date_format(df$column_character)
    #> [1] "2018-02-17"
    date_format(df$column_integer64)
    #> Error: Quosures can only be unquoted within a quasiquotation context.
    #> 
    #>   # Bad:
    #>   list(!!myquosure)
    #> 
    #>   # Good:
    #>   dplyr::mutate(data, !!myquosure)
    
    # Works
    date_format_new <- function(df, col){
      col_q = enquo(col)
    
      df %>%
        pull(!!col_q) %>% 
        as.character() %>% 
        base::as.Date(format = '%Y%m%d%H%M')
    
    }
    
    date_format_new(df, column_character)
    #> [1] "2018-02-17"
    date_format_new(df, column_integer64)
    #> [1] "2018-02-17"
    
    # Simpler
    date_format_simple <- function(col){
      base::as.Date(as.character(col), format = '%Y%m%d%H%M')
    }
    
    date_format_simple(df$column_character)
    #> [1] "2018-02-17"
    date_format_simple(df$column_integer64)
    #> [1] "2018-02-17"
    

    reprex package (v0.3.0) 于 2020-04-09 创建

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2019-04-22
      • 2019-12-08
      相关资源
      最近更新 更多