计算R中数据帧中不同类型的零

时间:2013-12-09 03:40:30

标签: r count dataframe

我有一个稍微复杂的“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 ...

有人可以帮忙吗? 感谢。

2 个答案:

答案 0 :(得分:1)

因此,如果您有数字,则您的比较会受到浮点错误的影响。而不是==,你想做的事情如下:

colSums(abs(data_frame) < epsilon)

对于您选择的一些小epsilon:根据您的数据精确度,这是有意义的。极值可能是all.equal函数用作默认容差的值:.Machine$double.eps ^ 0.5

答案 1 :(得分:-1)

您可以grep该列中的.(点)来获取索引的向量,其中该单元格包含0.00.00,依此类推。然后,您可以手动将这些单元格指定为NA。最后,您继续使用colSums(data_frame==0)并记住指定na.rm=TRUE