R语言 根据单个列的内容向tibble添加数据行

cunj1qz1  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(126)

我想根据tibble列中的值自动向现有tibble添加一行或多行。

数据

A   B   C   D     E
1   1   1   1   5   7.81
2   1   1   1   4   13.12
3   1   1   1   5   3.39
4   1   1   1   4   3.28
5   1   1   1   5   2.69
6   1   1   1   2   5.70
7   1   1   1   1   8.22

如果“D”中缺少“3”,则预期输出

A   B   C   D     E
1   1   1   1   5   7.81
2   1   1   1   4   13.12
3   1   1   1   5   3.39
4   1   1   1   4   3.28
5   1   1   1   5   2.69
6   1   1   1   2   5.70
7   1   1   1   1   8.22
8   1   1   1   3   0.00

tibbleD中,值的范围应在1:5之间,具体取决于数据集。
我希望能够确定列D中是否缺少此范围中的一个或多个数字,如果一个值我想添加一个新行,复制列A : C中的数据,并在列D中输入3,在列E中输入0。如果缺少两个或更多值(例如34)我想添加两行,等等。

6rqinv9w

6rqinv9w1#

您可以使用tidyr::complete

library(tidyverse)

Data %>% 
     complete(nesting(A,B,C), D = seq(min(D), max(D), 1L))

#> # A tibble: 8 x 5
#>       A     B     C     D     E
#>   <int> <int> <int> <int> <dbl>
#> 1     1     1     1     1  8.22
#> 2     1     1     1     2  5.7 
#> 3     1     1     1     3 NA   
#> 4     1     1     1     4 13.1 
#> 5     1     1     1     4  3.28
#> 6     1     1     1     5  7.81
#> 7     1     1     1     5  3.39
#> 8     1     1     1     5  2.69

我建议不要使用0而不是NA,但如果你想在底部添加它们并将它们作为0,那么这样就可以了:

Data %>% 
     complete(nesting(A,B,C), D = seq(min(D), max(D), 1L)) %>% 
     arrange(is.na(E)) %>% 
     mutate(E = replace_na(E, 0))

#> # A tibble: 8 x 5
#>       A     B     C     D     E
#>   <int> <int> <int> <int> <dbl>
#> 1     1     1     1     1  8.22
#> 2     1     1     1     2  5.7 
#> 3     1     1     1     4 13.1 
#> 4     1     1     1     4  3.28
#> 5     1     1     1     5  7.81
#> 6     1     1     1     5  3.39
#> 7     1     1     1     5  2.69
#> 8     1     1     1     3  0

创建于2019-06-20由reprex package(v0.3.0)

相关问题