将值添加到多行 id 直到指定数量
Add values to multiple rows of id up to specified amount
我有一个数据框,每个 id 有多行,类似于:
id
金额
1
21
1
2
1
3
2
66
2
22
3
10
3
11
3
12
3
13
3
14
3
15
3
16
3
17
我现在想为每个 id 添加更多行,直到每个 id 总共有 8 行。添加行中的金额应为零。所以,f.e.,对于 1,它看起来像这样:
id
金额
1
21
1
2
1
3
1
0
1
0
1
0
1
0
1
0
我怎样才能做到这一点?提前致谢!
我们可以在创建按 'id' 分组的序列列后使用 complete
(rowid
- 来自 data.table
)。在 complete
中,将 rn
的范围从 1 更改为 8,将 fill
的 'amount' 更改为 0(默认为 NA
)
library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
mutate(rn = rowid(id)) %>%
complete(id, rn = 1:8, fill = list(amount = 0)) %>%
select(-rn)
-输出
# A tibble: 24 x 2
id amount
<int> <dbl>
1 1 21
2 1 2
3 1 3
4 1 0
5 1 0
6 1 0
7 1 0
8 1 0
9 2 66
10 2 22
# … with 14 more rows
数据
df1 <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L), amount = c(21L, 2L, 3L, 66L, 22L, 10L, 11L, 12L,
13L, 14L, 15L, 16L, 17L)), class = "data.frame", row.names = c(NA,
-13L))
我有一个数据框,每个 id 有多行,类似于:
id | 金额 |
---|---|
1 | 21 |
1 | 2 |
1 | 3 |
2 | 66 |
2 | 22 |
3 | 10 |
3 | 11 |
3 | 12 |
3 | 13 |
3 | 14 |
3 | 15 |
3 | 16 |
3 | 17 |
我现在想为每个 id 添加更多行,直到每个 id 总共有 8 行。添加行中的金额应为零。所以,f.e.,对于 1,它看起来像这样:
id | 金额 |
---|---|
1 | 21 |
1 | 2 |
1 | 3 |
1 | 0 |
1 | 0 |
1 | 0 |
1 | 0 |
1 | 0 |
我怎样才能做到这一点?提前致谢!
我们可以在创建按 'id' 分组的序列列后使用 complete
(rowid
- 来自 data.table
)。在 complete
中,将 rn
的范围从 1 更改为 8,将 fill
的 'amount' 更改为 0(默认为 NA
)
library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
mutate(rn = rowid(id)) %>%
complete(id, rn = 1:8, fill = list(amount = 0)) %>%
select(-rn)
-输出
# A tibble: 24 x 2
id amount
<int> <dbl>
1 1 21
2 1 2
3 1 3
4 1 0
5 1 0
6 1 0
7 1 0
8 1 0
9 2 66
10 2 22
# … with 14 more rows
数据
df1 <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L), amount = c(21L, 2L, 3L, 66L, 22L, 10L, 11L, 12L,
13L, 14L, 15L, 16L, 17L)), class = "data.frame", row.names = c(NA,
-13L))