多个if语句和逻辑运算符

时间:2015-08-12 20:27:38

标签: r

我正在尝试一个简单的任务,但我的代码表现得很奇怪,我似乎无法弄清楚这个问题。

现在我只想将连续矩阵向量转换为具有三个级别的因子向量。代码如下。

现在的问题是输出与应该的输出不正确。例如,第三个输出如何变为"> 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"

1 个答案:

答案 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;进入我的职能。

相关问题