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

Max*_*Max 5 r dataframe

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

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

请参阅以下示例:

... a  ... new
---------------
    0      NA
   87.3    88
   88.1    88
   81.7    82
   79.2    80
   89.4    90
Run Code Online (Sandbox Code Playgroud)

Pat*_*cks 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
Run Code Online (Sandbox Code Playgroud)

返回:

> 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
Run Code Online (Sandbox Code Playgroud)


李哲源*_*李哲源 5

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

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
Run Code Online (Sandbox Code Playgroud)

您可以执行以下两项操作之一:

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
Run Code Online (Sandbox Code Playgroud)

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

df$new <- floor(df$a) + floor(df$a) %% 2
df$new[df$a == 0] <- NA
Run Code Online (Sandbox Code Playgroud)

最后的线路设置NA部分很容易理解。