R通过从零开始的id在dplyr中创建序列

R create sequence in dplyr by id beginning with zero

我正在寻找最简洁的方法来在数据帧中通过 id 创建一个从零开始的序列。

df <- data.frame (id=rep(1:10,each=10))

如果我想从 1 开始序列,可以执行以下操作:

library(dplyr)
df<-df %>% group_by(id) %>%
  mutate(start = 1:n()) %>% 
  ungroup()

但是从 0 开始不起作用,因为它创建了一个额外的数字(0-10 与 1-10 相比)所以我需要添加一个额外的行,有没有办法一步完成所有这些,也许使用 dplyr?显然有许多解决方法,例如创建另一个数据集并将其附加到原始数据集。

df1 <- data.frame (id=1:10,
                  start=0)
new<-rbind(df,df1)

这看起来有点尴尬而且不太整洁。我知道您可以在 dplyr 中使用 rbind 但不确定如何将所有内容合并到一个步骤中,特别是如果您有其他非时序变量,您只想复制到新行中。有兴趣看到建议,谢谢。

您可以使用 tidyverse 中的 complete():

library(tidyverse)
df %>%
  group_by(id) %>%
  mutate(start = 1:n()) %>%
  complete(start = c(0:10)) %>%
  ungroup()

产生

# A tibble: 110 x 2
      id start
   <int> <int>
 1     1     0
 2     1     1
 3     1     2
 4     1     3
 5     1     4
 6     1     5
 7     1     6
 8     1     7
 9     1     8
10     1     9
# ... with 100 more rows