如何以简单的方式处理多个if条件?

时间:2014-05-21 13:55:01

标签: r if-statement

假设我有多个if条件,在这些条件下,将不同的值分配给变量。例如:

x <- rep(c(1, 2, 3, 4, 5, 6, 7, 8), 4)
for(i in length(x)) {
    if(x[i] == 2) {
      x[i] <- 10
    }
    if(x[i] == 4) {
      x[i] <- 12
    }
    ## and there are more similar if conditions 
    ## ......
}

一般情况下,我想根据具体情况用其他数字替换此向量中的数字。如果没有编写这么长的循环,有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:4)

如果x是非零小整数,请将查找表作为简单向量:

lut=c(10,12,13,55,99,12,12,12,99,1010)
lut[x]
 [1] 10 12 13 55 99 12 12 12 10 12 13 55 99 12 12 12 10 12 13 55 99 12 12 12 10
 [26] 12 13 55 99 12 12 12

对于其他键,使用列表并表征所有内容:

> lut = list("999"=1, "8"=2, "foo"=223)
> unlist(lut[c("999","999","8","8","8","foo")])
 999 999   8   8   8 foo 
   1   1   2   2   2 223 

答案 1 :(得分:3)

您不一定需要任何if声明。您可以创建要将x更改为的值向量,然后使用replace

直接更改所有值
> x <- rep(c(1, 2, 3, 4, 5, 6, 7, 8), 4)    
> inds <- sapply(c(2, 4), function(z) which(x == z))
> vals <- c(rep(10, nrow(inds)), rep(12, nrow(inds)))
> replace(x, inds, vals)
##  [1]  1 10  3 12  5  6  7  8  1 10  3 12  5  6  7  8  1 10  3 12  5  6
## [23]  7  8  1 10  3 12  5  6  7  8