R:dplyr :: lag在尝试延迟tibble中的字符时抛出错误

Kim*_*ink 7 r lag dplyr tibble

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

mutate_impl(.data,dots)出错:期望单个字符串值:[type = logical; 程度= 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))
Run Code Online (Sandbox Code Playgroud)

Jak*_*her 9

您正在运行到这个错误,因为dplyrtibble严格有关的类型NA值,它们允许你使用(或者更具体地说,他们更严格的关于检查您所创建的变量的类型).你需要NA_character_,像这样:

res = tib %>%
    mutate(lag_n = lag(x, n=1, default = NA_character_))
Run Code Online (Sandbox Code Playgroud)

  • @CalumYou不幸的是,我不知道.我不知道`dplyr`如何很好地对待'NA`值.我刚刚认识到这与你使用`dplyr :: if_else` vs`base :: ifelse`时得到的错误类似. (2认同)