我认为这应该很容易做到.我有一个df包含多个列的数据框.在列aI中,具有介于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
Run Code Online (Sandbox Code Playgroud)
我建议使用内部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)
有两种选择。假设您有玩具数据:
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部分很容易理解。
| 归档时间: |
|
| 查看次数: |
1770 次 |
| 最近记录: |