【问题标题】:lag function returns NAs滞后函数返回 NA
【发布时间】:2016-10-08 23:10:36
【问题描述】:

有人对使用dplyr 包的这种结果有解释吗?

我有一个data.frame df

    library(dplyr)
    df = data_frame(
      'id' = c(1,2,2,2,2,3,3,3,3),
      'start' = c(881, 1611, 1611, 1642, 1764, 0, 0, 28, 59),
      'end' = c(1089, 1819, 1819, 1850, 1972, 208,  208,236, 267))

看起来像

    # Source: local data frame [9 x 3]
    #
    # id start   end
    # (dbl) (dbl) (dbl)
    # 1     1   881  1089
    # 2     2  1611  1819
    # 3     2  1611  1819
    # 4     2  1642  1850
    # 5     2  1764  1972
    # 6     3     0   208
    # 7     3     0   208
    # 8     3    28   236
    # 9     3    59   267

在按id 分组并在最后一列中应用滞后后,我预计每个id 都会缺少一个。

    df %>% 
      group_by(id) %>%
      mutate(end.prev = lag(end))

但我有

    # Source: local data frame [9 x 4]
    # Groups: id [3]
    # 
    # id start   end end.prev
    # (dbl) (dbl) (dbl)    (dbl)
    # 1     1   881  1089       NA
    # 2     2  1611  1819       NA
    # 3     2  1611  1819     1819
    # 4     2  1642  1850     1819
    # 5     2  1764  1972     1850
    # 6     3     0   208       NA
    # 7     3     0   208       NA  <- I don't understant this NA
    # 8     3    28   236       NA  <- Neither this one
    # 9     3    59   267       NA  <- nor this other

我正在使用 cran dplyr 0.4.3 中的最新版本(我的 R 版本是 3.2.5)

【问题讨论】:

  • 无法重现 R 3.3.0 和 dplyr_0.4.3.9001 中的问题。我建议更新 R 版本并检查它是否有效。
  • 我可以用 R 3.3.0 和 dplyr 0.4.3 重现它。
  • 是的,谢谢@akrun,最后一个 github 版本完美!
  • 做过一些(最近的)考古工作:github.com/hadley/dplyr/issues/1540
  • 我最近使用这个例子有问题http://stackoverflow.com/questions/37710520/r-differences-by-group-and-adding/37715856#37715856 如果我们在dplyr 中使用lag,它会显示NA。

标签: r dplyr lag


【解决方案1】:

我正在使用版本dplyr 版本1.0.5,它似乎正在工作。如果版本不重要,那么也许只需将您的 dplyr 升级到最新版本。

library(tidyverse)
df = tibble(
  'id' = c(1,2,2,2,2,3,3,3,3),
  'start' = c(881, 1611, 1611, 1642, 1764, 0, 0, 28, 59),
  'end' = c(1089, 1819, 1819, 1850, 1972, 208,  208,236, 267))

df %>% 
  group_by(id) %>%
  mutate(end.prev = lag(end))
#> # A tibble: 9 x 4
#> # Groups:   id [3]
#>      id start   end end.prev
#>   <dbl> <dbl> <dbl>    <dbl>
#> 1     1   881  1089       NA
#> 2     2  1611  1819       NA
#> 3     2  1611  1819     1819
#> 4     2  1642  1850     1819
#> 5     2  1764  1972     1850
#> 6     3     0   208       NA
#> 7     3     0   208      208
#> 8     3    28   236      208
#> 9     3    59   267      236

reprex package (v2.0.0) 于 2021-04-16 创建

【讨论】:

    猜你喜欢
    • 2019-12-28
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2018-06-05
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多