[英]R create range factor levels
我想自动化以下过程:
从向量获取最小值和最大值,并在给定特定步长的情况下定义从最小值到最大值的步长。 现在将向量内的每个值分配给一个label
(因子水平),该label
位于该范围内,例如,当值为27.45
时为"20-30"
。
目前,我正在使用此for循环
for (label_willi_counter in 1:length(willi)) {
if(willi[label_willi_counter] < 10)
label_willi = c(label_willi, "0 - 10")
else if(willi[label_willi_counter] < 20)
label_willi = c(label_willi, "10 - 20")
else if(willi[label_willi_counter] < 30)
label_willi = c(label_willi, "50 - 30")
else if(willi[label_willi_counter] < 40)
label_willi = c(label_willi, "30 - 40")
else if(willi[label_willi_counter] < 50)
label_willi = c(label_willi, "40 - 50")
else if(willi[label_willi_counter] < 60)
label_willi = c(label_willi, "50 - 60")
else if(willi[label_willi_counter] < 70)
label_willi = c(label_willi, "60 - 70")
else if(willi[label_willi_counter] < 80)
label_willi = c(label_willi, "70 - 80")
else if(willi[label_willi_counter] < 90)
label_willi = c(label_willi, "80 - 90")
else
label_willi = c(label_willi, "90 - 100")
}
很好,它可以工作,但是我敢肯定,有一种更好的(也许更快)的方法可以做到这一点。 对于minimum = 0
和maximum = 100
以及step-size = 10
此示例固定step-size = 10
。 我正在寻找一种更通用的方法。
试cut
:
x
# [1] 60 35 21 30 6 19 49 17 59 93 9 96 46 63 3 58 13 86 47 16
cut(x, breaks = seq(0,100,10), labels = lbl)
#[1] 50-60 30-40 20-30 20-30 0-10 10-20 40-50 10-20 50-60 90-100 0-10 #90-100 40-50 60-70
#[15] 0-10 50-60 10-20 80-90 40-50 10-20
#Levels: 0-10 10-20 20-30 30-40 40-50 50-60 60-70 70-80 80-90 90-100
数据
x <- c(60L, 35L, 21L, 30L, 6L, 19L, 49L, 17L, 59L, 93L, 9L, 96L, 46L,
63L, 3L, 58L, 13L, 86L, 47L, 16L)
lbl <- c("0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70",
"70-80", "80-90", "90-100")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.