如何在R中计算含NA的百分比列均值并使用均值填充NA值
R实现百分比列均值填充NA值方案
核心处理逻辑
- 先将带
%的字符格式百分比转换为可计算的数值类型 - 按列计算排除NA值后的算术均值
- 用对应列的均值填充该列所有NA值
- 可选操作:将数值转换回带
%的字符格式,修改列名为需求指定名称
方法1:tidyverse 简洁实现
# 加载依赖包 library(dplyr) library(tidyr) # 构造示例数据,可替换为你的实际数据框 df <- data.frame( response_rate = c("70%", "12%", NA, "78%", NA, "51%"), accept_rate = c("65%", NA, "100%", "20%", "7%", NA) ) df_result <- df %>% # 百分比转数值:删除百分号后转数值类型 mutate(across(c(response_rate, accept_rate), ~ as.numeric(sub("%", "", .)))) %>% # 按列用均值填充NA mutate(across(c(response_rate, accept_rate), ~ replace_na(., mean(., na.rm = TRUE)))) %>% # 可选:转回带%的字符串,修改列名 mutate(across(c(response_rate, accept_rate), ~ paste0(., "%"))) %>% rename(`begin rate` = response_rate, `end rate` = accept_rate)
方法2:基础R实现(无需额外安装包)
# 构造示例数据,可替换为你的实际数据框 df <- data.frame( response_rate = c("70%", "12%", NA, "78%", NA, "51%"), accept_rate = c("65%", NA, "100%", "20%", "7%", NA) ) # 1. 百分比转数值 df$response_rate <- as.numeric(sub("%", "", df$response_rate)) df$accept_rate <- as.numeric(sub("%", "", df$accept_rate)) # 2. 计算各列非NA值的均值 mean_resp <- mean(df$response_rate, na.rm = TRUE) mean_accept <- mean(df$accept_rate, na.rm = TRUE) # 3. 填充NA值 df$response_rate[is.na(df$response_rate)] <- mean_resp df$accept_rate[is.na(df$accept_rate)] <- mean_accept # 4. 可选:转回百分比格式,修改列名 df$response_rate <- paste0(df$response_rate, "%") df$accept_rate <- paste0(df$accept_rate, "%") colnames(df) <- c("begin rate", "end rate")
注意事项
如果不需要保留%格式,直接删除对应转回百分比的代码步骤即可,输出结果为纯数值类型。
内容的提问来源于stack exchange,提问作者GuiW
相关产品推荐
相关产品推荐

