R通过id以零开头在dplyr中创建序列

use*_*230 4 r seq dplyr

我正在寻找最干净的方法来创建一个在数据框中按 id 从零开始的序列。

df <- data.frame (id=rep(1:10,each=10))
Run Code Online (Sandbox Code Playgroud)

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

library(dplyr)
df<-df %>% group_by(id) %>%
  mutate(start = 1:n()) %>% 
  ungroup()
Run Code Online (Sandbox Code Playgroud)

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

df1 <- data.frame (id=1:10,
                  start=0)
new<-rbind(df,df1)
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*Jan 6

您可以complete()使用tidyverse

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

哪个产量

# 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
Run Code Online (Sandbox Code Playgroud)