我想使用另一个变量 A 的分位数创建一个因子变量。
我试过这段代码:
> cut(value, breaks=quantile(value, probs=seq(0,1, by=0.25)),
include.lowest=TRUE))
但它不起作用,因为一些分位数相同,所以它不知道如何切割。
> 'breaks' are not unique
示例:q1=2 q2=5 q3=5 q4=8
在这种情况下我该怎么办?也许我们可以在这种情况下随机切割
我想使用另一个变量 A 的分位数创建一个因子变量。
我试过这段代码:
> cut(value, breaks=quantile(value, probs=seq(0,1, by=0.25)),
include.lowest=TRUE))
但它不起作用,因为一些分位数相同,所以它不知道如何切割。
> 'breaks' are not unique
示例:q1=2 q2=5 q3=5 q4=8
在这种情况下我该怎么办?也许我们可以在这种情况下随机切割
这似乎有效
x=c(2,5,5,8,10)
qnt <- quantile(x,seq(0,1,.25))
cut(x,unique(qnt),include.lowest=TRUE)
# [1] [2,5] [2,5] [2,5] (5,8] (8,10]
# Levels: [2,5] (5,8] (8,10]
替代答案。如果您仍然想要四个垃圾箱,即使您的数据不能证明它是合理的,也有办法!
set.seed(1024)
x <- sample(1:3,101,replace=TRUE)
binx <- rank(x,ties.method="random")%/%(ceiling(length(x)/4)+1)
在这里你可以看到效果。
binx_ranges <- by(x,binx,range)
# binx: 0
# [1] 1 1
# ------------------------------------------------------------
# binx: 1
# [1] 1 2
# ------------------------------------------------------------
# binx: 2
# [1] 2 3
# ------------------------------------------------------------
# binx: 3
# [1] 3 3
table(binx,x)
# x
# binx 1 2 3
# 0 26 0 0
# 1 8 19 0
# 2 0 13 14
# 3 0 0 21