Очистка данных в R: Ошибка пропущенного значения, где требуется TRUE / FALSE - PullRequest
0 голосов
/ 05 ноября 2018

Итак, я пытался очистить свои необработанные данные, изменив 0, - и пустые значения на NA.

тестирование - это необработанные данные, и все это имеет значение, так как я получил их из CSV-файла.

Когда я запускаю этот код,

test <- matrix(0,216,111)

for(i in 1:216) {
  for(j in 1:111) {

    if(testing[i,j]== "0") {
      test[i,j] <- gsub("0","NA",testing[i,j])
    } else if(testing[i,j] == "-") {
      test[i,j] <- gsub("-","NA",testing[i,j])
    } else if(testing[i,j] == "") {
      test[i,j] <- gsub("","NA",testing[i,j])
    } else {
      test[i,j] <- testing[i,j]
    }
  }
}

Эта ошибка появляется при запуске кода.

Error in if (testing[i, j] == 0) { : 
missing value where TRUE/FALSE needed

Что я должен сделать, чтобы решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Это, вероятно, вызвано NA значениями в testing. Если вы сравните NA с "0", он вернет NA, который не является значением logical и поэтому не может быть оценен с помощью if. Вы можете использовать функцию isTRUE, которая будет возвращать FALSE, если testing[i][j] равно NA:

test <- matrix(0,216,111)

for(i in 1:216) {
  for(j in 1:111) {

    if(isTRUE(testing[i,j]== "0"))is {
      test[i,j] <- gsub("0","NA",testing[i,j])
     } else if(testing[i,j] == "-") {
       test[i,j] <- gsub("-","NA",testing[i,j])
     } else if(testing[i,j] == "") {
       test[i,j] <- gsub("","NA",testing[i,j])
    } else {
      test[i,j] <- testing[i,j]
    }
   }
  }
0 голосов
/ 05 ноября 2018

Это должно работать:

test <- matrix(0,216,111)

for(i in 1:216) {
  for(j in 1:111) {

    if(test[i,j]== "0") {
      test[i,j] <- gsub("0","NA",test[i,j])
    } else if(test[i,j] == "-") {
      test[i,j] <- gsub("-","NA",test[i,j])
    } else if(test[i,j] == "") {
      test[i,j] <- gsub("","NA",test[i,j])
    } else {
      test[i,j] <- test[i,j]
    }
  }
}

Проблема была в том, что вы не проверяли правильные данные! Это означает, что вы проверяли на testing, хотя вам нужно было test. Однако вместо циклов вы также можете использовать apply:

apply(test, 2, function(x){gsub("0","NA",x)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...