R中的清洗数据:缺少需要TRUE / FALSE的错误值

时间:2018-11-05 10:04:09

标签: r

所以我一直在尝试通过将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 :(得分:0)

这应该有效:

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)})

答案 1 :(得分:0)

这可能是由NA中的testing值引起的。如果将NA"0"进行比较,它将返回NA,它不是logical的值,因此不能由if求值。您可以使用isTRUE函数,如果FALSEtesting[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]
    }
   }
  }