r语言 - 如何使用tidyr完成与零完成列?



我有以下数据框架:

library(tidyverse)
dat <- tribble(~id, ~pos, ~val, 
"foo", 1, 10,
"foo", 2, 5,
"foo", 3, 1, 
"bar", 3, 13)

每个id的位置(pos)从1到3。我要做的是填充id的地方有不完整的pos和用0填充val。期望的结果是:

id      pos   val
foo       1    10
foo       2     5
foo       3     1
bar       1     0
bar       2     0
bar       3    13

如何用tidyr complete()实现?

我试过了,但是没有成功:

dat  %>% 
group_by(id) %>% 
complete(pos, fill = list(val = 0))

可以使用嵌套完成:

正如Darren Tsai在评论中指出的那样,只需要包括pos变量-使用嵌套是不必要的。

dat <- tribble(~id, ~pos, ~val, 
"foo", 1, 10,
"foo", 2, 5,
"foo", 3, 1, 
"bar", 3, 13)
dat %>% 
complete(id, pos, fill = list(val = 0))
# A tibble: 6 × 3
id      pos   val
<chr> <dbl> <dbl>
1 bar       1     0
2 bar       2     0
3 bar       3    13
4 foo       1    10
5 foo       2     5
6 foo       3     1

如果将数据分组,complete应用于每一组;所以你要做的是:

dat %>% complete(id, pos, fill = list(val = 0))

给出所有id-pos的组合,并用零填充缺失的val

最新更新