使用dplyr填充缺少的分类值group_by

使用dplyr填充缺少的分类值group_by

问题描述:

我有一个不完整的数据框,我想填充缺少的值以匹配组。使用dplyr填充缺少的分类值group_by

incomplete_table <- 
    tibble(id = c(1,1,2,2,3,3,3), 
     value = c("a",NA,"b","b","c","d", NA)) 

# # A tibble: 7 x 2 
#  id value 
# <dbl> <chr> 
# 1  1  a 
# 2  1 <NA> 
# 3  2  b 
# 4  2  b 
# 5  3  c 
# 6  3  d 
# 7  3 <NA> 

随着数值,我可以使用这样的事情:

complete_table <- incomplete_table %>% 
    group_by(id) %>% 
    mutate(value = max(value)) 

我如何填写范畴值,以类似的方式,使用dplyr? 这是我想要的结果:

# # A tibble: 7 x 2 
#  id value 
# <dbl> <chr> 
# 1  1  a 
# 2  1  a 
# 3  2  b 
# 4  2  b 
# 5  3  c 
# 6  3  d 
# 7  3 <NA> 
+0

什么是填充逻辑?为什么第7行的“NA”没有填满? – Psidom

+0

我想在组中的所有值都相同时填充单元格。第3组同时具有“c”和“d”,所以我无法知道正确的值 –

您可以用独特的价值​​3210的列,如果所有的值相同(n_distinct == 1),否则NA,这将离开列是:

incomplete_table %>% 
    group_by(id) %>% 
    mutate(value = coalesce(value, if (n_distinct(na.omit(value)) == 1) na.omit(value)[1] else NA_character_)) 

# A tibble: 7 x 2 
# Groups: id [3] 
#  id value 
# <dbl> <chr> 
#1  1  a 
#2  1  a 
#3  2  b 
#4  2  b 
#5  3  c 
#6  3  d 
#7  3 <NA> 
+0

谢谢!我不知道聚结功能。这正是我想要的 –

+0

酷。很高兴帮助! – Psidom