You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:36:03