数据框中的值是错误的吗?

时间:2013-01-24 12:24:06

标签: r csv dataframe return-value rounding

我有一个名为'x'的数据框,有几列和592行。

    > x[x$n.bounces >= 1, ][["magnitude"]]
  [1] 0.30 0.50 0.30 0.20 0.30 0.20 0.70 0.50 0.40 0.50 1.00 1.30 0.50 0.20 2.00 0.40 0.50 3.50 0.20 0.50 0.30 0.21 0.50 0.20 0.80
 [26] 0.30 0.30 0.60 0.30 1.00 1.90 1.20 0.30 1.50 0.81 0.20 0.80 0.60 3.40 1.20 2.40 1.40 0.20 1.70 1.20 1.40 2.40 0.40 0.80 1.70
 [51] 0.80 0.80 0.48 0.70 0.20 0.80 8.30 0.50 3.80 1.30 0.50 2.90 0.40 1.80 3.20 2.10 0.40 0.90 1.30 0.40 1.80 0.20 1.30 0.30 0.50
 [76] 0.30 0.70 0.30 0.40 2.00 0.60 0.30 0.70 1.10 0.20 2.70 0.40 0.80 1.90 0.30 0.60 1.00 1.30 1.10 0.90 0.50 0.70 0.70 0.20 0.30
[101] 0.20 0.50 2.10 1.60 0.20 0.20 0.60 0.20 0.33 0.60 0.60 0.30 0.50 0.40 0.50 0.30 0.70 0.90 0.50 0.60 1.50 3.20 0.20 4.20 2.30
[126] 1.40 0.30 0.50 0.20 0.90 0.50 3.10 0.50 0.20 2.30 0.60 0.20 5.50 0.50 1.00 1.00 0.60 1.50 3.00 0.80 1.30 0.20 4.09 0.20 0.40
[151] 0.20 0.20 1.30 0.50 1.00 2.10 1.50 1.70 0.20 3.60 1.60 0.20 0.20 0.70 1.50 0.20 0.20 1.00 0.30 0.30 2.80 0.80 0.30 0.20 0.23
[176] 2.00 1.00 0.92 0.80 0.33 0.80 1.10 0.20 0.60 1.50 0.30 0.53 0.35 0.30 0.43 0.50 8.80 0.20 0.30 1.10 0.22 4.70 0.20 0.21 1.10
[201] 0.30 1.50 0.50 0.20 0.20 0.20 0.64 0.20 0.80 0.20 0.43 0.40 0.20 0.40 0.40 0.20 0.30

> dput(x[x$n.bounces >= 1, ][["magnitude"]])
c(0.3, 0.5, 0.3, 0.2, 0.3, 0.2, 0.7, 0.5, 0.4, 0.5, 1, 1.3, 0.5, 
0.2, 2, 0.4, 0.5, 3.5, 0.2, 0.5, 0.3, 0.21, 0.5, 0.2, 0.8, 0.3, 
0.3, 0.6, 0.3, 1, 1.9, 1.2, 0.3, 1.5, 0.81, 0.2, 0.8, 0.6, 3.4, 
1.2, 2.4, 1.4, 0.2, 1.7, 1.2, 1.4, 2.4, 0.4, 0.8, 1.7, 0.799999999999999, 
0.8, 0.48, 0.7, 0.2, 0.8, 8.3, 0.5, 3.8, 1.3, 0.5, 2.9, 0.4, 
1.8, 3.2, 2.1, 0.4, 0.9, 1.3, 0.4, 1.8, 0.2, 1.3, 0.3, 0.5, 0.3, 
0.699999999999999, 0.3, 0.4, 2, 0.6, 0.3, 0.7, 1.1, 0.2, 2.7, 
0.4, 0.8, 1.9, 0.3, 0.6, 1, 1.3, 1.1, 0.9, 0.5, 0.7, 0.7, 0.2, 
0.3, 0.2, 0.5, 2.1, 1.6, 0.2, 0.2, 0.6, 0.2, 0.33, 0.6, 0.6, 
0.3, 0.5, 0.4, 0.5, 0.3, 0.7, 0.9, 0.5, 0.6, 1.5, 3.2, 0.2, 4.2, 
2.3, 1.4, 0.3, 0.5, 0.2, 0.9, 0.5, 3.1, 0.5, 0.2, 2.3, 0.6, 0.2, 
5.5, 0.5, 1, 1, 0.6, 1.5, 3, 0.8, 1.3, 0.2, 4.09, 0.2, 0.4, 0.2, 
0.2, 1.3, 0.5, 1, 2.1, 1.5, 1.7, 0.2, 3.6, 1.6, 0.2, 0.2, 0.7, 
1.5, 0.2, 0.2, 1, 0.3, 0.3, 2.8, 0.8, 0.3, 0.2, 0.23, 2, 1, 0.92, 
0.8, 0.33, 0.8, 1.1, 0.2, 0.6, 1.5, 0.3, 0.53, 0.35, 0.3, 0.43, 
0.5, 8.8, 0.2, 0.3, 1.1, 0.22, 4.7, 0.2, 0.21, 1.1, 0.3, 1.5, 
0.5, 0.2, 0.2, 0.2, 0.64, 0.2, 0.8, 0.2, 0.43, 0.4, 0.2, 0.4, 
0.4, 0.2, 0.3)

现在我想只选择具有“幅度”< 0.3:

> x[x$n.bounces >= 1 & x$magnitude < 0.3, ][["magnitude"]]
 [1] 0.20 0.30 0.20 0.20 0.20 0.21 0.20 0.30 0.20 0.20 0.20 0.20 0.30 0.30 0.30 0.20 0.20 0.20 0.20 0.20 0.20 0.30 0.20 0.20 0.20
[26] 0.20 0.20 0.20 0.20 0.20 0.20 0.20 0.20 0.20 0.20 0.30 0.20 0.23 0.20 0.30 0.20 0.30 0.22 0.20 0.21 0.20 0.20 0.20 0.20 0.20
[51] 0.20 0.20

为什么在这个选择中仍有几个(但不是全部!)值为0.30? 我尝试了其他值,似乎它只适用于值&lt; 1.0

最初的数据来自csv文件。

如果您需要更多信息,请告诉我们。我是R的新手,不知道可能有什么帮助...

1 个答案:

答案 0 :(得分:1)

您可以使用plyr包,并将其舍入为任意数字的倍数。

  x <- round_any(x ,0.01)