使用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>
答
您可以用独特的价值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
什么是填充逻辑?为什么第7行的“NA”没有填满? – Psidom
我想在组中的所有值都相同时填充单元格。第3组同时具有“c”和“d”,所以我无法知道正确的值 –