R和Excel之间缺乏大数据集的重复性

我在RStudio中运行R版本3.0.2,在Mac OS X中运行Excel 2011.我正在执行4组451515个值之间的分位数规范化。 是的,我知道bioconductor软件包,但我的问题是更一般的。 它可以是任何其他计算。 事情是,当我在Excel中“手工”执行计算(1)和(2)在R中从头开始编写的程序时,我得到高度相似但不完全相同的结果。 通常,(1)和(2)得到的值相差不到1.0%,有时甚至更多。

这种变化可能来自哪里,我应该知道什么R和/或Excel中的数字近似值? 这是否是因为这些程序中的任何一个程序缺乏精度? 我怎样才能避免这一点?

[编辑]正如我在评论中所build议的那样,这可能是特定案例。 为了提供一些上下文,我使用9行的testing数据详细描述了下面的方法(1)和(2)。 这四个数据集称为A,B,C,D。

[编辑注释]当我在一个非常小的数据集(testing样本:9行)上执行此操作时,R和Excel中的结果没有差异。 但是,当我将相同的代码应用于实际数据(45,015行)时,R和Excel之间会有细微的差异。 我不知道为什么会这样。

(2)R代码:

数据框A

 Aindex A 1 2.1675e+05 2 9.2225e+03 3 2.7925e+01 4 7.5775e+02 5 8.0375e+00 6 1.3000e+03 7 8.0575e+00 8 1.5700e+02 9 8.1275e+01 

dataframeB

 Bindex B 1 215250.000 2 10090.000 3 17.125 4 750.500 5 8.605 6 1260.000 7 7.520 8 190.250 9 67.350 

数据框C

 Cindex C 1 2.0650e+05 2 9.5625e+03 3 2.1850e+01 4 1.2083e+02 5 9.7400e+00 6 1.3675e+03 7 9.9325e+00 8 1.9675e+02 9 7.4175e+01 

dataframeD

 Dindex D 1 207500.0000 2 9927.5000 3 16.1250 4 820.2500 5 10.3025 6 1400.0000 7 120.0100 8 175.2500 9 76.8250 

码:

 #re-order by ascending values A <- A[order(A$A),, drop=FALSE] B <- B[order(B$B),, drop=FALSE] C <- C[order(C$C),, drop=FALSE] D <- D[order(D$D),, drop=FALSE] row.names(A) <- NULL row.names(B) <- NULL row.names(C) <- NULL row.names(D) <- NULL #compute average qnorm <- data.frame(cbind(A$A,B$B,C$C,D$D)) colnames(qnorm) <- c("A","B","C","D") qnorm$qnorm <- (qnorm$A+qnorm$B+qnorm$C+qnorm$D)/4 #replace original values by average values A$A <- qnorm$qnorm B$B <- qnorm$qnorm C$C <- qnorm$qnorm D$D <- qnorm$qnorm #re-order by index number A <- A[order(A$Aindex),,drop=FALSE] B <- B[order(B$Bindex),,drop=FALSE] C <- C[order(C$Cindex),,drop=FALSE] D <- D[order(D$Dindex),,drop=FALSE] row.names(A) <- NULL row.names(B) <- NULL row.names(C) <- NULL row.names(D) <- NULL 

(1)Excel

  1. 分配索引号给每个集合。

Excel的第一步

  1. 按升序重新sorting每个集合:select两列两列,并使用Custom Sort...按A,B,C或D:

Excel的第二步

  1. 计算列A,B,C和D上的average=()

Excel的第3步

  1. 用列表A,B,C和D中的值replaceaverage列中的Values使用Special Paste... > Values

Excel的步骤4

  1. 根据原始索引号重新sorting:

Excel的STEP5

如果您使用完全相同的algorithm,您将得到完全相同的结果。 不在1%以内,但小数点后10位。 所以你不使用相同的algorithm。 细节可能不会改变这个一般的答案。

(或者可能是excel或r中的一个bug,但这不太可能)

回答我自己的问题!

它最终导致了Excel的错误(好,有点):在某些时候,无论是从原始的TAB分隔的文件转换为CSV,还是以后,当我开始复制和粘贴东西时,值都被四舍五入。

原始的TAB分隔的文件有6位小数,而CSV文件只有2。我一直在做分析到目前为止在Excel中从6位数据完成分位数标准化,而我从CSV文件中读取数据为我R中的分位数归一化函数,因此变化。

对于上面的R和Excel示例,我使用了来自同一个源的数据,这就是为什么我得到相同的结果。

如果我想到这一点,最好的build议是:1改变标题让其他无知的人知道这种事情会发生? 2 /考虑这个post没用,并删除它?