error in function for converting integer to date format in r, error: "do not know how to convert '.' to class “Date”"
error in function for converting integer to date format in r, error: "do not know how to convert '.' to class “Date”"
我是 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”
这让我感到困惑,因为如果我完全期待字符列会遇到困难,因为在代码中我有一个不必要的步骤(在将其转换为日期之前将其转换为字符,但它已经是字符) .
我的错误在哪里?为什么没有这个功能也能用,但我试着用它作为模板,一半就不能用了?
提前感谢您的回答
不能确切地告诉你,为什么这个功能首先起作用。但是,我认为您的功能没有明确说明或搞砸了。如果您想使用 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 创建
我是 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”
这让我感到困惑,因为如果我完全期待字符列会遇到困难,因为在代码中我有一个不必要的步骤(在将其转换为日期之前将其转换为字符,但它已经是字符) .
我的错误在哪里?为什么没有这个功能也能用,但我试着用它作为模板,一半就不能用了?
提前感谢您的回答
不能确切地告诉你,为什么这个功能首先起作用。但是,我认为您的功能没有明确说明或搞砸了。如果您想使用 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 创建