如何将character类rate列的NA值填充为该列非NA均值
实现方法
你可以按照「字符转数值→计算非NA均值→填充NA值→转回百分比格式」的逻辑实现,以下是两种常用实现方案:
方案1:Base R 实现
首先构造示例数据:
df <- data.frame( rate = c("30%", "50%", NA, "2.65%", NA), stringsAsFactors = FALSE )
执行填充逻辑:
# 提取百分比中的数值部分,转为数值型 num_rate <- as.numeric(sub("%", "", df$rate)) # 计算非NA值的均值,保留两位小数 rate_mean <- round(mean(num_rate, na.rm = TRUE), 2) # 填充NA并转回百分比格式 df$rate <- ifelse(is.na(df$rate), paste0(rate_mean, "%"), df$rate)
输出结果验证:
print(df) # rate # 1 30% # 2 50% # 3 27.55% # 4 2.65% # 5 27.55%
方案2:tidyverse(dplyr)实现
适合习惯tidyverse语法的场景:
library(dplyr) df <- df %>% mutate( num_temp = as.numeric(sub("%", "", rate)), rate = ifelse(is.na(rate), paste0(round(mean(num_temp, na.rm = TRUE), 2), "%"), rate) ) %>% select(-num_temp)
补充说明
如果需要调整百分比的小数保留位数,修改round()函数的第二个参数即可,比如保留1位小数就改为round(..., 1)。
内容的提问来源于stack exchange,提问作者GuiW
相关产品推荐
相关产品推荐

