以下是一个例子:
height
1 1.5
2 1.3
3 1.9
4 1.5
5 1.6
其中1000个高度范围从0到1.9。我想将它们分为3个等级:低,中,高。然后它们是有序数据。
结果应如下所示:
height
1 medium
2 low
3 high
4 medium
5 medium
摘要应如下所示:
height
low: 203
medium: 723
high: 74
我尝试使用循环但是“低,中,高”是字符,而不是级别。 以下是我如何做到这一点:
height_cuts = c(1.5,1.9)
for(i in 1:nrow(health.sample)){
if(is.na(health.sample$height[i])==FALSE){
if(health.sample$height[i] < height_cuts[1]){
health.sample$height[i] = low_h
}
}
}
答案 0 :(得分:3)
cut(height, quantile(height, prob=c(203, 723, 74)/1000 ), labels=c("low", "medium", "high") )
答案 1 :(得分:2)
cut
会削减您的数据。
# cut needs all endpoints explicitly specified, including outside bounds
height_cuts <- c(-Inf, 1.5, 1.9, Inf)
hcut <- cut(height, height_cuts, labels=c("low", "medium", "high"))
ETA:这将使间隔基于&lt; = 1.5,&lt; = 1.9。如果您希望间隔<1.5,<1.9,请指定right=FALSE
:
hcut <- cut(height, height_cuts, right=FALSE, ...)
答案 2 :(得分:1)
使用cut
:
cut(x$height, c(0,1.5,1.9,10), labels=c("low","med","high"), right=FALSE)
# [1] med low high med med