R: dplyr::lag 试图在 tibble 中滞后字符时抛出错误
R: dplyr::lag throws error when trying to lag characters in tibble
当我尝试对 tibble 中的一列字符使用滞后函数(来自 dplyr 库)时,我在 R 中遇到以下错误:
Error in mutate_impl(.data, dots) : Expecting a single string
value: [type=logical; extent=1].
数据框中的一列字符不会出现此错误。我也没有收到 tibble 或数据框中一列数字的错误。
有谁知道为什么我在数据帧和小标题的滞后函数中会出现这种差异?谢谢!
下面是一些重现错误的示例代码。我有延迟何时有效和何时无效的示例。我已经尝试在我的机器上更新 tidyverse 和 dplyr 库,但我仍然遇到同样的错误。
tib = data_frame(x = c('a','b','c'), y = 1:3)
# lagging column of characters in tibble throws error
res = tib %>%
mutate(lag_n = lag(x, n=1, default = NA))
# lagging column of numbers in tibble does NOT throw error
res = tib %>%
mutate(lag_c = lag(y, n=1, default = NA))
df = data.frame(x = c('a','b','c'), y = 1:3)
# lagging column of characters in data frame does NOT throw error
res = df %>%
mutate(lag_n = lag(x, n=1, default = NA))
# lagging column of numbers in data frame does NOT throw error
res = df %>%
mutate(lag_c = lag(y, n=1, default = NA))
你 运行 陷入这个错误是因为 dplyr
和 tibble
对它们允许你使用的 NA
值的类型很严格(或者,更多具体来说,他们对检查您创建的变量的类型更加严格)。你需要 NA_character_
,像这样:
res = tib %>%
mutate(lag_n = lag(x, n=1, default = NA_character_))
当我尝试对 tibble 中的一列字符使用滞后函数(来自 dplyr 库)时,我在 R 中遇到以下错误:
Error in mutate_impl(.data, dots) : Expecting a single string value: [type=logical; extent=1].
数据框中的一列字符不会出现此错误。我也没有收到 tibble 或数据框中一列数字的错误。
有谁知道为什么我在数据帧和小标题的滞后函数中会出现这种差异?谢谢!
下面是一些重现错误的示例代码。我有延迟何时有效和何时无效的示例。我已经尝试在我的机器上更新 tidyverse 和 dplyr 库,但我仍然遇到同样的错误。
tib = data_frame(x = c('a','b','c'), y = 1:3)
# lagging column of characters in tibble throws error
res = tib %>%
mutate(lag_n = lag(x, n=1, default = NA))
# lagging column of numbers in tibble does NOT throw error
res = tib %>%
mutate(lag_c = lag(y, n=1, default = NA))
df = data.frame(x = c('a','b','c'), y = 1:3)
# lagging column of characters in data frame does NOT throw error
res = df %>%
mutate(lag_n = lag(x, n=1, default = NA))
# lagging column of numbers in data frame does NOT throw error
res = df %>%
mutate(lag_c = lag(y, n=1, default = NA))
你 运行 陷入这个错误是因为 dplyr
和 tibble
对它们允许你使用的 NA
值的类型很严格(或者,更多具体来说,他们对检查您创建的变量的类型更加严格)。你需要 NA_character_
,像这样:
res = tib %>%
mutate(lag_n = lag(x, n=1, default = NA_character_))