【问题标题】:R: dplyr::lag throws error when trying to lag characters in tibbleR:dplyr::lag 尝试在 tibble 中滞后字符时抛出错误
【发布时间】:2019-01-24 22:13:19
【问题描述】:

当我尝试对 tibble 中的一列字符使用 lag 函数(来自 dplyr 库)时,我在 R 中遇到以下错误:

mutate_impl(.data, dots) 中的错误:期望单个字符串 值:[类型=逻辑;范围=1]。

数据框中的一列字符不会发生此错误。对于小标题或数据框中的一列数字,我也没有收到错误。

有谁知道为什么我在数据帧与小标题的滞后函数中出现这种差异?谢谢!

这里是一些重现错误的示例代码。我有延迟有效和无效的例子。我已经尝试在我的机器上更新 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))

【问题讨论】:

    标签: r dplyr lag tibble


    【解决方案1】:

    您遇到此错误是因为 dplyrtibble 对它们允许您使用的 NA 值的类型非常严格(或者,更具体地说,它们对检查您创建的变量)。你需要NA_character_,像这样:

    res = tib %>%
        mutate(lag_n = lag(x, n=1, default = NA_character_))
    

    【讨论】:

    • 我知道这是您需要做的事情,但您是否知道为什么不必指定NA_integer_NA_real_?毕竟NA 默认是合乎逻辑的。另外,如果您忽略 default 参数并让它默认为 NA,则该函数可以工作,您会认为这是同一件事。
    • @CalumYou 不幸的是,我不知道。我不知道dplyr 如何处理NA 值的来龙去脉。我刚刚认识到这与您使用 dplyr::if_elsebase::ifelse 时遇到的错误类似。
    • 是的,我只是试图了解 mutate 源,但一旦深入 rcpp 就失败了 :(.
    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2021-03-07
    • 2020-05-04
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多