Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:使用矢量化按间隔分配值_R - Fatal编程技术网

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结构来测试每个数字,以找到正确的间隔。但我正在寻找更好、更矢量化的解决方案。如何有效地解决此问题?

a
a为要分配类的变量定义一个最小值和最大值,以及要分配多少类,该类将通过按等长间隔拆分变量范围来定义:

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