R中统计数据框内大于20的观测值数量结果与实际不符如何处理
问题原因
你构造数据框时,所有数值列的元素都用引号包裹,导致这些列的类型为字符型,而非数值型。直接执行>比较时,R会按字符串字典序而非数值大小进行判断:
字符串的比较规则是逐位对比字符的ASCII码值,9的ASCII码远大于2,因此所有以9开头的字符串(比如你数据里的"9.83546459757003")都会被判定为大于20,这部分多出来的3个误判结果,加上真实大于20的8个数值,刚好得到总和11。
验证方法
你可以执行以下代码查看列类型验证问题:
# 查看各列的数据类型 sapply(df, class) # 测试字符串比较逻辑 "9.8" > 20 # 返回值为TRUE,就是错误来源
解决方案
先将除第一列ID外的所有列转换为数值型,再做统计即可得到正确结果:
# 转换列类型 df[, -1] <- lapply(df[, -1], function(x) as.numeric(as.character(x))) # 重新统计 sum(df[,-1] > 20, na.rm = TRUE) # 此时返回结果为8,和手动统计一致
内容的提问来源于stack exchange,提问作者SUMIT
相关产品推荐
相关产品推荐

