如何在tidyr的complete函数中手动指定变量补全取值?
解决方法
要生成group(1、2)和item_id(1、2、3)的所有6种组合,直接在complete()函数里手动指定item_id的目标取值范围即可,不用嵌套nesting()(除非需要保留原有分组的嵌套逻辑,这里不需要)。
完整代码示例
library(tibble) library(tidyr) df <- tibble( group = c(1:2), item_id = c(1:2), value1 = c(1, 2) ) # 手动指定item_id的所有水平,生成全组合 df_full <- complete(df, group, item_id = 1:3)
运行后得到的结果就是你要的6行数据,缺失的value1会自动填充为NA:
# A tibble: 6 × 3 group item_id value1 <int> <int> <dbl> 1 1 1 1 2 1 2 NA 3 1 3 NA 4 2 1 NA 5 2 2 2 6 2 3 NA
额外提示
- 如果
item_id的目标值不是连续序列(比如1、3、5),直接传入对应向量就行:item_id = c(1,3,5) - 要是需要固定
group的水平(比如原数据缺失某些group,但你要指定特定值),同样可以用group = 1:2这种方式明确指定
内容的提问来源于stack exchange,提问作者boshek
相关产品推荐
相关产品推荐

