如何将DataFrame每行最大值替换为预先计算的自定义值
替换数据框每行最大值为向上取整值的简化方案
以下是几种比你现有代码更简洁高效的实现方式:
Base R 简洁实现
无需拆分步骤,通过矩阵索引直接完成替换:
# 生成每行最大值的位置索引矩阵 max_pos <- cbind(seq(nrow(DF)), apply(DF, 1, which.max)) # 直接替换对应位置的值为其向上取整结果 DF[max_pos] <- ceiling(DF[max_pos])
Tidyverse 风格实现
如果偏好dplyr的管道语法,可以这样写:
library(dplyr) DF <- DF %>% rowwise() %>% mutate( across(everything(), ~ ifelse(.x == max(c_across(everything())), ceiling(.x), .x)) ) %>% ungroup()
高效批量处理(matrixStats包)
针对大数据量场景,matrixStats的rowMaxs能快速计算每行最大值,再批量替换:
library(matrixStats) row_maxes <- rowMaxs(as.matrix(DF)) # 匹配每行最大值并替换 DF[DF == row_maxes] <- ceiling(row_maxes)
这些方法都省去了单独存储索引和循环计算的步骤,代码更简洁,可读性和执行效率也更高。
内容的提问来源于stack exchange,提问作者Nadiine El Nino
相关产品推荐
相关产品推荐

