r - dplyr:lead() 和 lag() 与 group_by() 一起使用时出错

标签 r dplyr

我想在每个组中找到lead() 和lag() 元素,但得到了一些错误的结果。

比如数据是这样的:

library(dplyr)
df = data.frame(name=rep(c('Al','Jen'),3),
                score=rep(c(100, 80, 60),2))
df

数据:
  name score
1   Al   100
2  Jen    80
3   Al    60
4  Jen   100
5   Al    80
6  Jen    60

现在我尝试找出每个人的 Lead() 和 lag() 分数。
如果我使用排列()对其进行排序,我可以得到正确的答案:
df %>%
  arrange(name) %>%
  group_by(name) %>%
  mutate(next.score = lead(score),
         before.score = lag(score) )

输出 1:
Source: local data frame [6 x 4]
Groups: name

      name score next.score before.score
    1   Al   100         60           NA
    2   Al    60         80          100
    3   Al    80         NA           60
    4  Jen    80        100           NA
    5  Jen   100         60           80
    6  Jen    60         NA          100

没有arrange(),结果是错误的:
df %>%
  group_by(name) %>%
  mutate(next.score = lead(score),
         before.score = lag(score) )

输出 2:
Source: local data frame [6 x 4]
Groups: name

  name score next.score before.score
1   Al   100         80           NA
2  Jen    80         60           NA
3   Al    60        100           80
4  Jen   100         80           60
5   Al    80         NA          100
6  Jen    60         NA           80

例如,在第一行,Al 的 next.score 应该是 60(第三行)。

有人知道为什么会这样吗?为什么排列()会影响结果(值,而不仅仅是顺序)?谢谢~

最佳答案

似乎您必须向滞后和领先功能传递额外的参数。当我在没有安排的情况下运行你的函数,但添加了 order_by 时,一切似乎都没问题。

df %>%
group_by(name) %>%
mutate(next.score = lead(score, order_by=name),
before.score = lag(score, order_by=name))

输出:
  name score next.score before.score
1   Al   100         60           NA
2  Jen    80        100           NA
3   Al    60         80          100
4  Jen   100         60           80
5   Al    80         NA           60
6  Jen    60         NA          100

我的 session 信息():
R version 3.1.1 (2014-07-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Polish_Poland.1250  LC_CTYPE=Polish_Poland.1250        LC_MONETARY=Polish_Poland.1250
[4] LC_NUMERIC=C                   LC_TIME=Polish_Poland.1250    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.4.1

loaded via a namespace (and not attached):
[1] assertthat_0.1  DBI_0.3.1       lazyeval_0.1.10 magrittr_1.5                parallel_3.1.1  Rcpp_0.11.5    
[7] tools_3.1.1 

关于r - dplyr:lead() 和 lag() 与 group_by() 一起使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52083029/

相关文章:

r - 将 JSON 列添加到 R 数据框

r - 如何给重复行相同的排名?

r - R中的对称非负矩阵分解

r - 使用R中的dplyr按月创建季节变量

r - dplyr 使用 lubridate::hhmm 格式和 minute() 进行过滤

r - 在 magrittr 管道中打印数据帧的一个元素

R ggplot突出显示季度数字表已取代数字

r - 如何标记R中特定行周围的任何值范围?

r - 有没有办法使用 dplyr 用 0 填充缺失的日期?

r - 对于 R 中以特定字符串开头的所有列,对行内的列进行求和