我有一个从0到1的数字向量。我想将它们分成X个组 - 例如X=5
,然后将数字四舍五入到5组:0中的所有数字到0.2将为0,从0.2到0.4都将是0.2,等等。
例如,如果我有x <- c(0.34,0.07,0.56)
和X=5
,就像上面的解释一样,我会得到(0.2, 0, 0.4)
。
到目前为止,我发现的唯一方法是循环遍历整个矢量。有更优雅的方式吗?
答案 0 :(得分:4)
您可以这样做:
floor(x*X)/X
# [1] 0.2 0.0 0.4
更多测试案例:
X = 10
floor(x*X)/X
# [1] 0.3 0.0 0.5
X = 2
floor(x*X)/X
# [1] 0.0 0.0 0.5
X = 5
floor(x*X)/X
# [1] 0.2 0.0 0.4
数据:
x <- c(0.34,0.07,0.56)
答案 1 :(得分:2)
尝试:
cut.alt <- function(x, X) {
out <- cut(x, breaks=(1:X-1)/X)
levels(out) <- as.character((1:X-1)/X)
out
}
设置为cut
的中断的 (1:X-1)/X
将矢量x
划分为OP请求的组。然后将级别更改为截止值给出了答案。
答案 2 :(得分:1)
或使用plyr
:
library(plyr)
round_any(x, 1/X,floor)
# [1] 0.2 0.0 0.4