R语言行条件填充:NA数≤2时填常量1并计算行均值
R语言实现NA填充与行均值计算
使用dplyr的简洁实现
先加载dplyr包,通过链式操作一次性完成所有需求:
library(dplyr) tData_processed <- tData %>% rowwise() %>% mutate( na_count = sum(is.na(c_across(starts_with("b")))), across(starts_with("b"), ~ ifelse(na_count <= 2, replace_na(.x, 1), .x)), row_mean = mean(c_across(starts_with("b")), na.rm = TRUE) ) %>% ungroup() # 查看处理结果 print(tData_processed)
代码说明:
rowwise():指定后续操作按行执行na_count:统计每行中以b开头的列的NA数量across(starts_with("b")):批量处理所有b开头的列,仅当该行NA数≤2时,用replace_na()把NA替换为1,否则保留原NArow_mean:计算填充后b列的行均值,na.rm = TRUE确保忽略未被填充的NA(比如第4行全NA,均值为NaN)
使用base R的实现
如果不想依赖dplyr,用base R代码也能完成:
# 计算每行b列的NA数量 na_counts <- rowSums(is.na(tData[, -1])) # 复制原数据集用于处理 tData_base <- tData # 对NA数≤2的行,替换b列中的NA为1 tData_base[na_counts <= 2, -1][is.na(tData_base[na_counts <= 2, -1])] <- 1 # 计算行均值 tData_base$row_mean <- rowMeans(tData_base[, -1], na.rm = TRUE) # 查看处理结果 print(tData_base)
代码说明:
rowSums(is.na(tData[, -1])):统计每行(排除subID列)的NA数量- 用逻辑索引
na_counts <= 2筛选出需要处理的行,再定位其中的NA替换为1 rowMeans()计算行均值,na.rm = TRUE处理剩余的NA
内容的提问来源于stack exchange,提问作者kaho
相关产品推荐
相关产品推荐

