Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr:lead()和lag()与group_by()一起使用时出错_R_Dplyr - Fatal编程技术网

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

dplyr:lead()和lag()与group_by()一起使用时出错,r,dplyr,R,Dplyr,我想在每个组中找到lead()和lag()元素,但得到了一些错误的结果 例如,数据如下所示: library(dplyr) df = data.frame(name=rep(c('Al','Jen'),3), score=rep(c(100, 80, 60),2)) df 数据: 现在我试着找出每个人的lead()和lag()分数。 如果我使用arrange()对其排序,我可以得到正确的答案: df %>% arrange(name) %>%

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

例如,数据如下所示:

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

现在我试着找出每个人的lead()和lag()分数。 如果我使用arrange()对其排序,我可以得到正确的答案:

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
例如,在第1行,Al的下一个分数应该是60(第3行)


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

看来您必须向滞后函数和超前函数传递额外的参数。当我运行你的函数没有安排,但添加了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
My sessionInfo():


当您只有一个分组变量时,使用order_by是很好的。在多个分组变量的情况下,我找不到任何解决方案,除了编写和读取表以摆脱分组变量。它对我来说非常有效,但其效率取决于表的大小。

可能会使用
stats::lag
(例如,在使用
会话
包恢复环境时)。这很容易在不被注意的情况下溜过去,因为它不会像问题中那样使用时抛出错误。通过简单地键入
lag
进行双重检查,使用
conflicted
包,或者通过调用
dplyr::lag
来消除函数调用的歧义


同样的情况也可能发生在
plyr::mutate
,以防您在会话中加载了
plyr
包。因此,请确保您也在调用
dplyr::mutate

@DavidArenburg。这不是排序,OP会询问为什么结果是80,而在原始数据帧中,下一个结果是60。就好像是珍的成绩被选上了,而不是阿尔的成绩,我不能再重复了。您使用的是哪个版本的R?我在Windows上使用R3.1.2获得
1 Al 100 60 NA
7@PanagiotisKanavos是的,你是对的。我没有注意到。我可以重现奇怪的结果(
0.4.1.9000
)。我认为(在快速、模糊地浏览了一系列函数调用的源代码之后),这是因为底层代码是按实际的总体行索引而不是相对行索引进行的。这也许可以解释
lead
(我认为
pmin
是奇怪的地方),但不确定
lag
(没有看那里)。这似乎是
dplyr
的最新版本0.4.1中的一个bug,并且已经有报道说我正在处理一个类似的lag案例,但是有一个改变-多个列用于分组和排序!如果group_by和order_by中有多个列,答案会有多大不同?我尝试传递向量,但没有帮助。我为这种情况创建了一个虚拟分组变量,以允许使用order\u by:
mutate(grouping=sprintf(“%04d-”,var1,var2))%%>%mutate(next.score=lead(score,order\u by=grouping)%%>%select(-grouping)
许多软件包都有延迟功能——正如这条评论所述,验证/消除歧义是至关重要的,除非你仅仅依靠一小部分软件包或基本的R+dplyr。在找到这个强调dplyr:muta的天赐回复之前,我浪费了最后两个小时试图理解应该运行的代码中突然出现的错误te和dplyr:滞后。这需要更多的关注。谢谢你,先生。
  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
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