У меня есть большой фрейм данных с именем z с 107310 строками и 8 столбцами.У него нет NA, поскольку он прошел через эту функцию: z<-z[complete.cases(z),]
, чтобы исключить все строки, содержащие NA.
Я создал следующий цикл for, чтобы удалить все строки, если значение определенного столбца выше, чем значение другого конкретного столбца.
Во-первых, я попробовал следующий код:
for(row in 1:nrow(z)){
i <- z[row, 1]
j <- z[row, 2]
ci<- z[row, 6]
cj<- z[row, 7]
year <- z[row, 8]
if(cj>ci){
z<-z[-row,]}
}
Цикл будет проходить, но остановится на некоторой строке, указывая на следующую ошибку:
«ошибка: пропущенное значение гдеTRUE / FALSE требуется "
Несмотря на то, что там, где нет NA, я адаптировал цикл, чтобы избежать ошибки, делая значения в выражении if всегда числовыми:
for(row in 1:nrow(z)){
i <- z[row, 1]
j <- z[row, 2]
ci<- z[row, 6]
cj<- z[row, 7]
year <- z[row, 8]
temp<-ci-cj
temp<-ifelse(!is.na(temp),temp,0)
if(temp<=0){
z<-z[-row,]}
}
Однако циклвсе еще останавливается, прежде чем удаляет все строки, в которых cj> ci. Последними значениями, которые он генерирует для i и j, является NA, а для ci и cj - NA_real, даже если эти значения не являются NA в наборе данных.
Кто-нибудь знает, что происходит? Спасибо