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
- 分配索引号给每个集合。
- 按升序重新sorting每个集合:select两列两列,并使用
Custom Sort...
按A,B,C或D:
- 计算列A,B,C和D上的
average=()
:
- 用列表A,B,C和D中的值replace
average
列中的Values
使用Special Paste...
>Values
:
- 根据原始索引号重新sorting:
如果您使用完全相同的algorithm,您将得到完全相同的结果。 不在1%以内,但小数点后10位。 所以你不使用相同的algorithm。 细节可能不会改变这个一般的答案。
(或者可能是excel或r中的一个bug,但这不太可能)
回答我自己的问题!
它最终导致了Excel的错误(好,有点):在某些时候,无论是从原始的TAB分隔的文件转换为CSV,还是以后,当我开始复制和粘贴东西时,值都被四舍五入。
原始的TAB分隔的文件有6位小数,而CSV文件只有2。我一直在做分析到目前为止在Excel中从6位数据完成分位数标准化,而我从CSV文件中读取数据为我R中的分位数归一化函数,因此变化。
对于上面的R和Excel示例,我使用了来自同一个源的数据,这就是为什么我得到相同的结果。
如果我想到这一点,最好的build议是:1改变标题让其他无知的人知道这种事情会发生? 2 /考虑这个post没用,并删除它?