我正在寻找最干净的方法来创建一个在数据框中按 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,但不确定如何将所有内容合并到一个步骤中,特别是如果您有其他非定时变化变量,您只想复制到新行中。有兴趣看看建议,谢谢。
您可以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)