将数据舍入到最接近的偶数整数

时间:2016-06-23 12:27:30

标签: r dataframe

我认为这应该很容易做到。我有一个包含多个列的数据框df。在a列中,我有1到100之间的不同值。

通过比较它们,我想在new中创建一个列df来对它们进行分组。对它们进行分组的功能应该将a中的值四舍五入为最接近的偶数并将其保存在df$new中。如果a = 0,则应将new设置为NA

请参阅以下示例:

... a  ... new
---------------
    0      NA
   87.3    88
   88.1    88
   81.7    82
   79.2    80
   89.4    90

2 个答案:

答案 0 :(得分:6)

我建议使用内部round函数与除法/乘法结合使用2。

df <- data.frame(a = c(0, 87.3, 88.1, 81.7, 79.2, 89.4))

# Round to nearest even integer
df$new <- 2 * round(df$a/2)

# Set 0 values of original array to NA in the result
df$new[df$a == 0] <- NA

返回:

> df
     a new
1  0.0  NA
2 87.3  88
3 88.1  88
4 81.7  82
5 79.2  80
6 89.4  90

答案 1 :(得分:4)

有两种选择。假设你有玩具数据:

set.seed(0); x <- round(runif(10, 1, 5),1)  ## toy data
# [1] 4.6 2.1 2.5 3.3 4.6 1.8 4.6 4.8 3.6 3.5

您可以执行以下两种方法之一:

ceiling(x) - ceiling(x) %% 2
# [1] 4 2 2 4 4 2 4 4 4 4

floor(x) + floor(x) %% 2
# [1] 4 2 2 4 4 2 4 4 4 4

因此,对于您的数据框,您可能会这样做:

df$new <- floor(df$a) + floor(df$a) %% 2
df$new[df$a == 0] <- NA

最后一行设置NA部分很容易理解。