我想在每个组中找到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

现在我试着找出每个人的领先和落后分数.

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

例如,在第一行,艾尔的下一个.分数应该是60分(第三行).

有人知道为什么会这样吗?为什么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():

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相关问答推荐

当我们不知道确切的子集号时,在框架中对数据进行子集化

R -列表元素中所有命名项的总和

R通过字符串中的索引连接数据帧r

如何使用shinyChatR包配置聊天机器人

根据R中的另一个日期从多列中 Select 最近的日期和相应的结果

根据R中两个变量的两个条件删除带有dspirr的行

查找图下的面积

R Highcharts与两个位置关联的注释

通过使用str_detect对具有相似字符串的组进行分组

如何在kableextra调用cell_spec()中忽略NA?

使用case_match()和char数组重新编码值

矩阵的堆叠条形图,条形图上有数字作为标签

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

R-按最接近午夜的时间进行筛选

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

如何删除R中除数字元素以外的所有元素

将摘要图添加到facet_WRAP gglot的末尾

变长向量的矢量化和

R -基线图-图形周围的阴影区域

TidyVerse中长度不等的列结合向量