You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么在R中使用sum()无法准确统计≥90分且不含100分的成绩数量

问题原因分析

你遇到的问题核心是 data$test 列的数据类型不是数值型,而是字符型(character)或因子型(factor),具体逻辑如下:

  • 做相等判断 == 100 时,R会自动将右侧的数值100转换为和左侧列同类型的字符串"100",正好能匹配到值为"100"的行,所以统计结果4是正确的。
  • 做大小比较 < 100 时,字符型数据会按照字典序进行对比:"90"、"93"、"98"这类90分段的字符串首字符是'9',而"100"的首字符是'1',字典序中'9' > '1',因此所有90分段的字符串都会被判定为大于"100",导致data$test < 100 对所有90+非满分的数据都返回FALSE,最终求和结果为0。
  • 替换为!= 100后,判断逻辑又回到了相等性匹配,R仍然会按字符串匹配排除值为"100"的行,此时>=90的字符串比较也能正确匹配到首字符为'9'的90分段数据,因此得到正确结果7。
解决方案

先将test列转换为数值类型再做统计即可,转换代码如下:

# 如果是因子型需要先转字符再转数值,避免直接转成因子的层级编码
data$test <- as.numeric(as.character(data$test))

转换完成后,你最初写的区间统计代码就能正常运行:

sum(data$test < 100 & data$test >= 90, na.rm = T)

内容的提问来源于stack exchange,提问作者CHIA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:24:06