使用 dplyr group_by 填充缺失的分类值
fill missing categorial values using 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>
如果所有值都相同 (n_distinct == 1
),您可以 coalesce
具有唯一值的 值 列,否则 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>
我有一个不完整的数据框,我想填充缺失值以匹配组。
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>
如果所有值都相同 (n_distinct == 1
),您可以 coalesce
具有唯一值的 值 列,否则 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>