如何在R语言中提取向量中小数部分非零的数值
提取R语言向量中小数部分非零的元素
嘿,这个问题其实很容易解决,我给你两种实用的R语言实现方案,都能精准提取出你要的结果:
方法一:通过整数部分差值判断
核心逻辑是:如果一个数的小数部分不为0,那么它减去自身的整数部分后结果会大于0。我们可以用floor()函数获取每个元素的整数部分,然后做筛选:
x <- c(0.0, 0.5, 1.000, 1.5, 1.6, 1.7, 1.75, 2.0, 2.4, 2.5, 3.0, 74.0) # 筛选小数部分非零的元素 target_vec <- x[x - floor(x) > 0] target_vec
运行这段代码后,你会得到预期的结果:
[1] 0.5 1.5 1.6 1.7 1.75 2.4 2.5
方法二:利用相等性对比简化代码
另一种更简洁的思路是:小数部分为0的数,和它四舍五入后的整数值完全相等。反过来,我们只需要筛选出不等于自身四舍五入后整数的元素即可:
target_vec <- x[x != round(x)] target_vec
这个方法对你给出的正数向量完全适用,结果和第一种方法一致。
额外提示
- 如果你的向量包含负数,推荐用
trunc()替代floor()(trunc()会直接截断小数部分,不考虑正负方向),判断条件改成x - trunc(x) != 0,避免出现判断错误。 - 要是遇到浮点数精度问题(比如计算后得到
1.0000000001这类极小误差的数值),可以给判断加一个阈值,比如x - floor(x) > 1e-8,这样就能忽略这类无意义的微小小数部分啦。
内容的提问来源于stack exchange,提问作者John L. Godlee
相关产品推荐
相关产品推荐

