我认为这应该很容易做到。我有一个包含多个列的数据框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
答案 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
部分很容易理解。