Циклические логические операторы на двух разных наборах данных для создания третьего набора данных в R - PullRequest
0 голосов
/ 17 июня 2019

У меня есть два набора данных Mtest и Ztest. Я пытаюсь сравнить каждое значение в соответствующих наборах данных с нулем и использовать результат сравнения, чтобы создать новый набор данных с результатами. Сравнение должно привести к одному из трех результатов.

Result 1: Mtest > 0 & Ztest > 0 <- "OW"
Result 2: Mtest < 0 & Ztest < 0 <- "UW"
Result 3: Mtest < 0 & Ztest > 0 | Mtest > 0 & Ztest < 0 <- "MW"

Набор данных 1: Mtest:

  A           B             C
-0.0136       0.0078         -0.0234
-0.0377       0.1369         -0.0387

Набор данных 2: Ztest

  A           B             C
-0.4283      0.4441         -0.6826
-1.888      -0.5877         -1.2024

Желаемый вывод:

  A             B            C
 UW             OW           UW
 UW             MW           UW

Моя логика не генерирует MW для строки B столбца 2. Ниже приведен пример вывода, который генерирует мой цикл:

  A             B            C
 UW            OW            UW
 UW            OW            UW

Когда я запускаю следующий цикл, он не работает должным образом, и мне было трудно понять, что я делаю неправильно.

testMatrix <- matrix(0, ncol = 3, nrow = 2)

    for(i in 1:ncol(Ztest)) {
  if(c(Ztest[,i], Mtest[,i]) > 0){
    testMatrix[,i] <- "OW"
  } else {
    if((Ztest[,i] > 0 & Mtest[,i] < 0) | (Ztest[,i] < 0 & Mtest[,i] > 0)){
      testMatrix[,i] <- "MW"
    } else {
      if(c(Ztest[,i],Mtest[,i]) < 0){
        testMatrix[,i] <- "UW"
      }
    }
  }
}

Я ценю любую помощь, которую вы можете оказать мне в том, что моя ошибка. Спасибо.

1 Ответ

0 голосов
/ 18 июня 2019

Вам нужно перебрать как строки, так и столбцы. Прямо сейчас вы всегда присваиваете одно и то же значение всему столбцу. Попробуйте:

testMatrix <- matrix(0, ncol = 3, nrow = 2)

for(i in 1:nrow(Ztest)) {
  for(j in 1:ncol(Ztest)) {
    if(Ztest[i,j] > 0 & Mtest[i,j] > 0){
      testMatrix[i,j] <- "OW"
    } else {
      if((Ztest[i,j] > 0 & Mtest[i,j] < 0) | (Ztest[i,j] < 0 & Mtest[i,j] > 0)){
        testMatrix[i,j] <- "MW"
      } else {
        if(Ztest[i,j] < 0 & Mtest[i,j] < 0){
          testMatrix[i,j] <- "UW"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...