我想在每个分组中找到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()分数。如果我使用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
例如,在第一行中,Al的next.score应该是60(第三行)。有人知道为什么会发生这种情况吗?为什么arrange()会影响结果(不仅仅是关于顺序的值)?谢谢~
1 Al 100 60 NA
。 - Panagiotis Kanavos0.4.1.9000
)。我认为(在快速、睡眼惺忪地查看函数调用系列源代码后),这是因为底层代码按实际整体行索引而不是相对行索引进行操作。这可能解释了lead
(我认为pmin
是异常发生的位置),但不确定lag
发生了什么(没有查看那里)。 - hrbrmstrdplyr
中似乎存在一个错误,已经在这里报告过了。 - alex23lemm