如何用R语言将数据集中的NA或"N/A"替换为对应列的均值
替换DataFrame中NA/"N/A"为列均值的正确实现
问题背景
你需要处理一个应为数值型列的DataFrame,其中存在NA缺失值和"N/A"字符串,目标是将这些值替换为对应列的非缺失值均值。你尝试的代码存在类型不匹配和缺失值识别错误的问题。
原代码的问题
- 列当前是字符类型,直接调用
mean()会报错,因为字符无法计算均值 %in% c("N/A", "NA")无法匹配真正的NA缺失值(NA是R中的缺失值类型,不是字符串"NA")mutate_all已被dplyr弃用,推荐使用mutate(across(...))
修正后的实现步骤
- 将字符列转换为数值型,同时把
"N/A"字符串转换为NA缺失值 - 对每列,将
NA替换为该列的非缺失值均值
完整代码
# 示例数据 data <- structure(list(`Review Star` = c("N/A", "5", "5", "4", NA, "5", "3.4", NA), `Total Review` = c("N/A", "1", "5", "5", NA, "1", "5", NA)), row.names = c(NA, -8L), class = c("tbl_df", "tbl", "data.frame")) library(dplyr) # 处理逻辑 data_cleaned <- data %>% # 1. 将字符列转数值,"N/A"转为NA mutate(across(everything(), ~as.numeric(ifelse(. == "N/A", NA, .)))) %>% # 2. 替换NA为列均值 mutate(across(everything(), ~ifelse(is.na(.), mean(., na.rm = TRUE), .))) # 查看结果 data_cleaned
运行结果
# A tibble: 8 × 2 `Review Star` `Total Review` <dbl> <dbl> 1 4.68 3.6 2 5 1 3 5 5 4 4 5 5 4.68 3.6 6 5 1 7 3.4 5 8 4.68 3.6
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

