如何在R中对数据框指定列统计特定范围值数量与行最大值?
在R中实现指定列的行内计数与最大值计算
先创建示例数据框
df <- data.frame( id = 1:6, varA = c(3,4,6,8,0,3), varB = c(5,8,9,7,3,7), varC = c(7,3,1,7,0,15), varD = c(12,7,0,4,2,9), varE = c(2,4,11,2,1,11) )
方法1:Base R 实现
无需额外安装包,直接用apply函数处理行数据:
# 定义需要处理的目标列 target_cols <- c("varA", "varC", "varE") # 生成newVar:统计每行中值处于3-15之间的数量 df$newVar <- apply(df[target_cols], 1, function(x) sum(x >= 3 & x <= 15, na.rm = TRUE)) # 生成maxVar:统计每行的最大值 df$maxVar <- apply(df[target_cols], 1, max, na.rm = TRUE)
方法2:Tidyverse(dplyr)实现
适合习惯管道操作的用户,用rowwise()结合c_across()实现:
library(dplyr) df <- df %>% rowwise() %>% mutate( newVar = sum(c_across(all_of(target_cols)) >= 3 & c_across(all_of(target_cols)) <= 15, na.rm = TRUE), maxVar = max(c_across(all_of(target_cols)), na.rm = TRUE) ) %>% ungroup()
验证结果
运行后得到的结果与示例完全一致:
| id | varA | varB | varC | varD | varE | newVar | maxVar |
|---|---|---|---|---|---|---|---|
| 1 | 3 | 5 | 7 | 12 | 2 | 2 | 7 |
| 2 | 4 | 8 | 3 | 7 | 4 | 3 | 4 |
| 3 | 6 | 9 | 1 | 0 | 11 | 2 | 11 |
| 4 | 8 | 7 | 7 | 4 | 2 | 2 | 8 |
| 5 | 0 | 3 | 0 | 2 | 1 | 0 | 1 |
| 6 | 3 | 7 | 15 | 9 | 11 | 3 | 15 |
补充说明
na.rm = TRUE用于处理数据中可能存在的缺失值,若确认数据无缺失可删除该参数,但保留能提升代码鲁棒性。all_of(target_cols)用于在tidyverse语法中引用预先定义的列名向量,完美适配变量名无规律、需逐个指定的场景。
内容的提问来源于stack exchange,提问作者Silas Alves Costa
相关产品推荐
相关产品推荐

