Если вы зафиксированы, вставьте имена строк в новый столбец, тогда лучше всего использовать цикл for
и серию операторов if
.Проблема, с которой вы пытаетесь использовать ifelse
, заключается в том, что у вас более двух условий: и ошибка, и ошибка, и ошибка b, и ошибки нет.
Решение без использования ifelse
x<-c()
for(i in 1:nrow(dt)){
if(is.na(dt[i,"a_check"]) & is.na(dt[i,"b_check"])){
x<- c(x,paste("Missing Value found in a_check & b_chekc", rownames(dt)[i]))
}else if(is.na(dt[i,"a_check"])){
x<- c(x,paste("Missing Value found in a_check", rownames(dt)[i]))
}else if(is.na(dt[i,"b_check"])){
x<- c(x,paste("Missing Value found in b_check", rownames(dt)[i]))
}else{
x<- c(x,NA)
}
}
dt$error <- x
Обновление
Как вы указали, есть 500 столбцов, которые не будут работать, поэтому вы можете попробовать это
# Create error message matrix
z<-sapply(colnames(dt), function(i){
ifelse(is.na(x[,i]),paste("Missing Value found in", i, sep =" "), NA)
})
# Collapse matrix, no error will be an empty string
error<-apply(z,1,function(i){
paste(i[!is.na(i)], collapse = " & ")
})
dt$error <- error