【问题标题】:fill missing categorial values using dplyr group_by使用 dplyr group_by 填充缺失的分类值
【发布时间】:2017-10-05 13:49:49
【问题描述】:

我有一个不完整的数据框,我想填充缺失值以匹配该组。

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>

【问题讨论】:

  • 填充逻辑是什么?为什么第 7 行的NA 没有填满?
  • 我想在组中的所有值都相同时填充单元格。第 3 组既有“c”又有“d”,所以我不知道正确的值

标签: r group-by dplyr missing-data


【解决方案1】:

如果所有值都相同(n_distinct == 1),您可以coalesce value 列具有唯一值,否则 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>

【讨论】:

  • 谢谢!我不知道合并功能。这正是我想要的
  • 酷。很高兴它有帮助!
猜你喜欢
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2012-10-25
相关资源
最近更新 更多