使用dplyr Lead

时间:2016-01-30 20:41:09

标签: r dplyr

我只想获得一组分组记录的主要价值。见下文

dat <- data.frame(ids = c(1,1,1,1,2,3,4,4))
dat$id <- 1:nrow(dat)
library(dplyr)

y <- tbl_df(dat) %>% 
  group_by(ids) %>% 
  mutate(next_id = lead(id, 1))

当你看到y

的结构时
> str(y)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 8 obs. of  3 variables:
 $ ids    : num  1 1 1 1 2 3 4 4
 $ id     : int  1 2 3 4 5 6 7 8
 $ next_id: int  2 3 4 NA NA NA 8 NA
 - attr(*, "vars")=List of 1
  ..$ : symbol ids
 - attr(*, "labels")='data.frame':  4 obs. of  1 variable:
  ..$ ids: num  1 2 3 4
  ..- attr(*, "vars")=List of 1
  .. ..$ : symbol ids
  ..- attr(*, "drop")= logi TRUE
 - attr(*, "indices")=List of 4
  ..$ : int  0 1 2 3
  ..$ : int 4
  ..$ : int 5
  ..$ : int  6 7

我所期待的只是一个简单的int列,而不是嵌套的数据结构。

我确信我遗漏了一些明显的东西,但是我们将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

Per @ David上面的评论,ungroup是关键。

dat <- data.frame(ids = c(1,1,1,1,2,3,4,4))
dat$id <- 1:nrow(dat)
library(dplyr)

y <- tbl_df(dat) %>% 
  group_by(ids) %>% 
  ungroup %>% 
  mutate(next_id = lead(id, 1))
str(y)

> str(y)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   8 obs. of  3 variables:
 $ ids    : num  1 1 1 1 2 3 4 4
 $ id     : int  1 2 3 4 5 6 7 8
 $ next_id: int  2 3 4 5 6 7 8 NA