如何为R数据框每行计算最大值并添加至最后一列?
为R数据框添加每行最大值列(列名Requerimiento)
需求说明
计算给定数据框每行的最大值,将结果添加为最后一列,列名设为Requerimiento。
原始数据
ejemplo <- structure(list(Trat = c("GFF1 (F1 - Fertilizante Químico (FQ) 100%)Granadilla", "GFF1 (F1 - Fertilizante Químico (FQ) 100%)Granadilla", "GFF2 (50% quimico y 50%organico)" ), Fuente = c("Abotek", "Equilibrio Ca", "Abotek"), `Nitrogeno (N)` = c(104.733333333333, 0, 120.2), `Fosforo (PsO5)` = c(4.18933333333333, 0, 4.808), `Potasio (K2O)` = c(24.0886666666667, 0, 27.646), `Boro (B)` = c(0.104733333333333, 0, 0.1202), `Calcio (CaO)` = c(NA, 39.05, 0), `Magnesio (MgO)` = c(5.23666666666667, 3.5145, 6.01), `Zinc(ZnO)` = c(0.104733333333333, 0, 0.1202 )), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame" ))
解决方案
提供两种常用实现方式:
1. Base R 方法
利用apply函数遍历数值列,计算每行最大值(忽略NA值):
# 添加最大值列 ejemplo$Requerimiento <- apply(ejemplo[, 3:ncol(ejemplo)], 1, max, na.rm = TRUE)
2. dplyr(Tidyverse)方法
适合处理tibble格式的数据,语法更直观:
library(dplyr) ejemplo_with_MaxValue <- ejemplo %>% rowwise() %>% # 指定要计算的数值列范围 mutate(Requerimiento = max(c_across(`Nitrogeno (N)`:`Zinc(ZnO)`), na.rm = TRUE)) %>% ungroup()
结果验证
两种方法生成的结果与期望数据框一致,Requerimiento列正确记录了每行的最大值:
# 查看结果 ejemplo_with_MaxValue
内容的提问来源于stack exchange,提问作者Alex Velasquez
相关产品推荐
相关产品推荐

