R语言统计DataFrame每行指定区间数值出现次数代码问题求解
错误原因
- 区间逻辑和需求完全不匹配:你代码的判断逻辑和注释的统计目标完全写反,
sumTP对应的代码判断是>0.2,但注释标注统计-0.20.2区间;`sumFN`对应的代码判断是-0.20.2,但注释标注统计0.2~1区间。 - 缺少区间上限判断:0.2~1区间的统计逻辑没有加
≤1的限制,所有大于0.2的数值(包括示例数据中大于1的极端值)都会被计入,导致结果偏高。 - 边界规则不明确:你定义的三个区间存在边界重叠问题,比如等于-0.2、等于0.2、等于1的数值没有明确归属,会导致统计漏算或重复计算。
修正后的基础实现代码
你可以直接调整判断逻辑,按需调整边界的不等号即可,这里默认规则:< -0.2、-0.2≤x≤0.2、0.2<x≤1
# 统计< -0.2的次数 df5$sumFP <- rowSums(df5[,-1] < -0.2) # 统计-0.2~0.2的次数 df5$sumMid <- rowSums(df5[,-1] >= -0.2 & df5[,-1] <= 0.2) # 统计0.2~1的次数 df5$sumTP <- rowSums(df5[,-1] > 0.2 & df5[,-1] <= 1)
如果要保留你原来的sumFP/sumTP/sumFN命名,按需替换上述代码的列名即可。
更稳健的多区间统计实现
如果后续需要调整区间分界点,推荐用cut函数统一处理,避免重复写判断逻辑出错:
# 定义区间分界点和对应标签 breaks <- c(-Inf, -0.2, 0.2, 1) labels <- c("sumFP", "sumMid", "sumTP") # 按行统计各区间出现次数,合并到原数据框 df5 <- cbind(df5, t(apply(df5[,-1], 1, function(x) { table(cut(x, breaks = breaks, labels = labels, include.lowest = FALSE)) })))
内容的提问来源于stack exchange,提问作者SUMIT
相关产品推荐
相关产品推荐

