我正在尝试一个简单的任务,但我的代码表现得很奇怪,我似乎无法弄清楚这个问题。
现在我只想将连续矩阵向量转换为具有三个级别的因子向量。代码如下。
现在的问题是输出与应该的输出不正确。例如,第三个输出如何变为"> 1500"
,哪个可能出错?
代码
funcion.x <- function(x) { if (x < 500) x <- "<500"
if(x > 500 & x < 1500) x <- "500-1500"
if (x > 1500) x <- "> 1500"
return (x)
}
> x
[,1]
[1,] 28
[2,] 341
[3,] 758
[4,] 665
[5,] 583
[6,] 695
[7,] 424
[8,] 302
[9,] 197
[10,] 181
[11,] 86
[12,] 68
[13,] 34
[14,] 24
[15,] 18
[16,] 8
[17,] 6
[18,] 5
[19,] 3
[20,] 3
[21,] 1
[22,] 4438
> apply(x, 1, function.x)
[1] "<500" "<500" "> 1500" "> 1500" "> 1500" "> 1500" "<500" "<500" "<500" "<500" "<500" "<500" "<500" "<500" "<500" "<500"
[17] "<500" "<500" "<500" "<500" "<500" "> 1500"
答案 0 :(得分:2)
这个功能怎么样:
function.x <- function(x)
{
c("<500","500-1500",">1500")[which.max(x<c(500,1500,Inf) | x==c(-Inf,1500,Inf))]
}
akrun的使用&#34; cut&#34; 几乎有效。问题是&#34; cut&#34;产生半开间隔。但在这里我们想要一个封闭的间隔和两个开放的间隔。为了解决这个问题,我加入了奇怪的&#34; x == c(-Inf,1500,Inf)&#34;进入我的职能。