所以我一直在尝试通过将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
我应该怎么解决这个问题?
答案 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
函数,如果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]
}
}
}