2017-10-05 67 views
0

我有一個不完整的數據框,我想填充缺少的值以匹配組。使用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」,所以我無法知道正確的值 –

回答

1

您可以用獨特的價值​​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