我有一个稍微复杂的“data_frame”,因为列的零存储有不同的小数点。 因此,例如,一列的零为0,另一列为0.0,另一列为0.000,依此类推。 我试图计算数据帧每列中的所有零,所以当我编码时:
>colSums(data_frame==0)
我只获得零值存储为0的列中的零个数。其他零值为0.00,0.000 ....等显示为NA计数。 这是数据的格式
str(data_frame)
$ P0 : num 0 0 1 1 2 0 0 2 2 5 ...
$ P1 : num 8 10 2 0 5 0 6 4 2 5 ...
$ P2 : num 8 7 4 0 5 1 6 10 2 8 ...
$ P3 : num 7 6 2 3 6 6 6 2 2 10 ...
$ P4 : num 3 14.62 2 1.12 3 ...
$ P.x : num 6.5 9.4062 1.5 0.0312 2.75 ...
$ InvN.x : num 0.8792 1.505 -0.5619 -1.1856 -0.0886 ...
$ h1 : num 65 80 75 40 86 32 75 40 60 76 ...
$ h2 : num 65 75 65 60 86 74 45 0 60 60 ...
$ h3 : num 80 75 75 70 61 91 44 33 40 75 ...
$ h4 : num 65 60 60 45 50 84 40 75 80 85 ...
$ meanh : num 68.8 72.5 68.8 53.8 70.8 ...
$ PQ1 : num 1.663 2.812 0.23 0.015 0.762 ...
$ PQ2 : num 1.755 2.525 0.578 0.125 1.133 ...
$ PQ3 : num 1.843 2.217 0.54 -0.02 0.307 ...
$ change : int 21 24 7 3 12 12 18 12 5 15 ...
$ meanbin : int 15 18 15 5 16 16 3 1 8 19 ...
有人可以帮忙吗? 感谢。
答案 0 :(得分:1)
因此,如果您有数字,则您的比较会受到浮点错误的影响。而不是==
,你想做的事情如下:
colSums(abs(data_frame) < epsilon)
对于您选择的一些小epsilon
:根据您的数据精确度,这是有意义的。极值可能是all.equal
函数用作默认容差的值:.Machine$double.eps ^ 0.5
。
答案 1 :(得分:-1)
您可以grep
该列中的.
(点)来获取索引的向量,其中该单元格包含0.0
或0.00
,依此类推。然后,您可以手动将这些单元格指定为NA
。最后,您继续使用colSums(data_frame==0)
并记住指定na.rm=TRUE
。