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

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,否则保留原NA
  • row_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:45:06