【发布时间】:2017-12-25 12:35:58
【问题描述】:
我尝试了不同的函数将小数四舍五入为两位数,例如format()、formatC()、signif() 和round()。他们都不能真正将所有小数四舍五入到小数点后两位。
比如我的数据框DF有三列:Index、PDF和CDF:
Index PDF CDF
1 -1.00 8.306360e-07 8.306360e-09
2 -0.99 8.332774e-07 1.663913e-08
3 -0.98 8.411712e-07 2.505085e-08
4 -0.97 8.542267e-07 3.359311e-08
5 -0.96 8.722951e-07 4.231606e-08
6 -0.95 8.951719e-07 5.126778e-08
7 -0.94 9.226012e-07 6.049380e-08
8 -0.93 9.542808e-07 7.003660e-08
9 -0.92 9.898679e-07 7.993528e-08
10 -0.91 1.028986e-06 9.022514e-08
...
...
...
Index 列是一个向量,从 -1.00 到 10.00。任何连续元素之间的差为 0.01。这意味着unique(diff(Index)) 应该只返回一个值并且它必须是 0.01。但是,unique(diff(Index)) 可以返回几个 0.01。
我的目的是计算列CDF的任意两个元素之间的差异,这两个元素是通过指示它们的Index来选择的。例如,
a<-DF$CDF[DF$Index==(r+dr)];
b<-DF$CDF[DF$Index==(r-dr)];
res<-a-b;
r 是Index 的任意数量,dr 可以是 0.01、0.02 或 0.03。但是,由于Index 的某些元素不能四舍五入为 2 位数字(尽管它们看起来都是这样),因此我无法计算任何 r 和 dr 的 res。
我应该如何解决这个问题?提前感谢您的建议!
【问题讨论】:
-
如果您知道它们绝对是唯一的,为什么不首先确保排序顺序,然后创建一个整数索引
1:length(DF$Index)?
标签: r floating-point