在R语言中如何筛选值为0.000而非0的元素?
区分数值向量里的0和显示为0.000的极小值
你遇到的问题本质是:在R里,0和0.000的数值是完全相等的,所以直接用==根本没法区分。你看到的0.000大概率是极小的p值(比如小于0.0005)被自动格式化显示成了0.000,不是真的等于0。
给你两个可行的解决思路:
思路1:用阈值筛选非零极小值
如果你的目标是挑出那些实际大于0、但小到显示为0.000的p值,直接设定一个合理的阈值范围就行,比如:
p <- c(0, 0, 1e-6, 2e-7, 0, 0, 0.001) select <- p[p > 0 & p < 0.0005]
这个范围能精准捞到那些被显示为0.000的非零值,同时排除真正的0。
思路2:如果数据是字符串格式导入的
要是你的数据原本是从文本里读进来的,0和0.000是字符串层面的差异,那先转成字符型再判断:
p_char <- c("0", "0", "0.000", "0.000", "0", "0", "0.001") select <- as.numeric(p_char[p_char == "0.000"])
但注意,要是数据已经是数值型向量了,这个方法就没用。
额外提醒
- 别用
==直接比浮点数!浮点数有精度误差,用范围或者all.equal()才靠谱。 - 想知道向量元素的真实值?用
print(p, digits = 10)就能显示更多小数位,不会被格式化的显示骗了。
内容的提问来源于stack exchange,提问作者Timon
相关产品推荐
相关产品推荐

