如何在R中统计同时满足TPR<1且FPR=1的元素数量
解决R中统计双条件对应元素数量的问题
你需要统计的是BM1_TPRs和BM1_FPRs对应位置上,同时满足TPR < 1且FPR = 1的元素个数,这和Excel中COUNTIFS的多条件计数逻辑一致,以下是正确实现方式及错误原因分析:
正确实现方式
方法1:基础向量运算(最直接)
先将列表转为向量,对每个位置做逐元素逻辑判断,最后求和(TRUE会被识别为1,FALSE识别为0):
# 转换列表为向量 TPRs <- unlist(BM1_TPRs) FPRs <- unlist(BM1_FPRs) # 统计同时满足双条件的元素数量 target_count <- sum(TPRs < 1 & FPRs == 1, na.rm = TRUE)
方法2:tidyverse风格(适合数据框场景)
如果将两个向量整合为数据框,可使用dplyr的过滤计数:
library(dplyr) # 构建数据框 perf_data <- tibble(TPR = unlist(BM1_TPRs), FPR = unlist(BM1_FPRs)) # 过滤后统计行数 target_count <- perf_data %>% filter(TPR < 1, FPR == 1) %>% nrow()
你之前的错误原因
- 使用
AND()函数:AND(a, b)是判断a和b两个整体是否都为真,而非逐元素的逻辑与。你之前的写法实际是在判断“TPR<1的元素总数是否非零”和“FPR=0的元素总数是否非零”,完全偏离了对应位置双条件计数的需求。 - 使用
intersect():intersect用于寻找两个集合的交集,即两个逻辑向量中共同存在的TRUE/FALSE值,不是对应位置同时为TRUE的情况,因此不适用。
内容的提问来源于stack exchange,提问作者Marlen
相关产品推荐
相关产品推荐

