让我们创建一个简单的df:
col1 <- runif(n = 10, min = 0.1, max = 1)
col2 <- c(1,3,5,8,19,21,34,41,45,46)
col3 <- c('A','B','C','D','E','F','G','H','I','J')
df <- data.frame(col1, col2, col3)
df
col1 col2 col3
1 0.4715977 1 A
2 0.8364755 3 B
3 0.2936675 5 C
4 0.5438777 8 D
5 0.3691008 19 E
6 0.6030533 21 F
7 0.5171806 34 G
8 0.4804162 41 H
9 0.3031454 45 I
10 0.8507250 46 J
关于col2的后续值,我想在col2的数值之间添加带有零和NA的行,所以在第1行和第2行之间,我想在col2中再增加一行2的值,例如这个:
col1 col2 col3
1 0.4715977 1 A
2 0 2 NA
2 0.8364755 3 B
总结整个df应该如下:
col1 col2 col3
1 0.4715977 1 A
2 0 2 NA
3 0.8364755 3 B
4 0 4 NA
5 0.2936675 5 C
6 0 6 NA
7 0 7 NA
8 0.5438777 8 D
9 0 9 NA
10 0 10 NA
11 0 11 NA
12 0 12 NA
13 0 13 NA
14 0 14 NA
15 0 15 NA
16 0 16 NA
17 0 17 NA
18 0 18 NA
19 0.3691008 19 E
20 0 20 NA
21 0.6030533 21 F
22 0 22 NA
23 0 23 NA
24 0 24 NA
25 0 25 NA
26 0 26 NA
27 0 27 NA
28 0 28 NA
29 0 29 NA
30 0 30 NA
31 0 31 NA
32 0 32 NA
33 0 33 NA
34 0.5171806 34 G
35 0 35 NA
36 0 36 NA
37 0 37 NA
38 0 38 NA
39 0 39 NA
40 0 40 NA
41 0.4804162 41 H
42 0 42 NA
43 0 43 NA
44 0 44 NA
45 0.3031454 45 I
10 0.8507250 46 J
您能给我一个提示,以简单的方式做到这一点,我在考虑dplyr ...
答案 0 :(得分:2)
使用tidyr
,您可以执行以下操作:
complete(df, col2 = seq(min(col2), max(col2), 1), fill = list(col1 = 0))
col2 col1 col3
<dbl> <dbl> <fct>
1 1 0.191 A
2 2 0 <NA>
3 3 0.638 B
4 4 0 <NA>
5 5 0.908 C
6 6 0 <NA>
7 7 0 <NA>
8 8 0.995 D
9 9 0 <NA>
10 10 0 <NA>