R:使用矢量化按间隔分配值
让我们看一个数值向量:R:使用矢量化按间隔分配值,r,R,让我们看一个数值向量: a <- round(runif(20, 1, 5), 0) [1] 3 5 4 2 1 2 3 4 5 2 这是一个非常简单的示例表,但可能有数千个数字和数十个间隔 我可以使用嵌套if结构来测试每个数字,以找到正确的间隔。但我正在寻找更好、更矢量化的解决方案。如何有效地解决此问题?aa为要分配类的变量定义一个最小值和最大值,以及要分配多少类,该类将通过按等长间隔拆分变量范围来定义: a <- c(3, 5, 4, 2, 1, 2, 3, 4, 5, 2)
a <- round(runif(20, 1, 5), 0)
[1] 3 5 4 2 1 2 3 4 5 2
这是一个非常简单的示例表,但可能有数千个数字和数十个间隔
我可以使用嵌套if结构来测试每个数字,以找到正确的间隔。但我正在寻找更好、更矢量化的解决方案。如何有效地解决此问题?
aa为要分配类的变量定义一个最小值和最大值,以及要分配多少类,该类将通过按等长间隔拆分变量范围来定义:
a <- c(3, 5, 4, 2, 1, 2, 3, 4, 5, 2)
cut(a, breaks=c(0.5, 2.5, 4.5, 10), labels=c("A", "B", "C"))
minValue <- 1
maxValue <- 5
numClasses <- 3
minValue为要分配类的变量定义一个最小值和最大值,以及要分配多少类,该类将通过在等长间隔内拆分变量范围来定义:
minValue <- 1
maxValue <- 5
numClasses <- 3
minValue你在找cut()
?在打代码高尔夫方面你可以做(对于这个非常具体的例子)c(“a”、“a”、“b”、“b”、“c”)[a]
你在找cut()
?在打代码高尔夫方面你可以做(对于这个非常具体的例子)c(“a”、“a”、“b”、“c”)[a]
breaks <- seq(minValue, maxValue, length.out = numClasses+1)
#[1] 1.000000 2.333333 3.666667 5.000000
set.seed(1)
a <- round(runif(20, 1, 5), 0)
#[1] 2 2 3 5 2 5 5 4 4 1 2 2 4 3 4 3 4 5 3 4
labels = seq(1, length(breaks)-1) #integer labels
classes <- cut(a, breaks=breaks, labels=labels, include.lowest = TRUE)
#[1] 1 1 2 3 1 3 3 3 3 1 1 1 3 2 3 2 3 3 2 3
labels = LETTERS[1:(length(breaks)-1)]
classes <- cut(a, breaks=breaks, labels=labels, include.lowest = TRUE)
#[1] A A B C A C C C C A A A C B C B C C B C