R if else语句在行内

时间:2019-03-05 22:54:07

标签: r

我有数据

         [,1] [,2] [,3]
   [1,]    0    0    0
   [2,]    0    1    0
   [3,]    0    1    0
   [4,]    0    0    0
   [5,]    1    0    0
   [6,]    1    0    0

对于每一行,如果第一个值是1,则让第三个值是1;如果第二个值是1,那么让第三个值是2。因此,我得到的数据应该像

         [,1] [,2] [,3]
   [1,]    0    0    0
   [2,]    0    1    2
   [3,]    0    1    2
   [4,]    0    0    0
   [5,]    1    0    1
   [6,]    1    0    1

我尝试在for循环中使用if else语句:

for (i in 1:nrow(data)){
  if(data[i,1] == 1){
    data[i,3] == 1
  } else if(data[i,2] == 1){
    data[i,3] == 2
  }else{
    data[i,3] == 0
  }
}

结果第三列仍然是零列。我在哪里做错了?

1 个答案:

答案 0 :(得分:1)

您可以使用replace

m[, 3] <- replace(m[, 1], m[, 2] == 1, 2)
m
#     V1 V2 V3
#[1,]  0  0  0
#[2,]  0  1  2
#[3,]  0  1  2
#[4,]  0  0  0
#[5,]  1  0  1
#[6,]  1  0  1

数据

m <- structure(c(0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L), .Dim = c(6L, 3L), .Dimnames = list(NULL, 
    c("V1", "V2", "V3")))