Хм, если я это сделаю, я получу
Error in if (is.na(newfile[i,8]) && !is.na(newfile[(i-1),8]) { :
missing value where TRUE/FALSE needed
Это потому, что вы удаляете строки во время их итерации, поэтому к тому времени вы получаете nrow(newfile)
(чтоисходное количество строк, поскольку nrow(newfile)
вычисляется один раз в начале цикла foor), оно может больше не существовать, поскольку строки были удалены.
Вы можете полностью избежать зацикливания, создав логическую схему.Индекс строк, которые нужно сохранить (т. е. вектор длины nrow(newfile)
с TRUE
, если вы хотите сохранить строку и FALSE
в противном случае):
n <- nrow(newfile)
# first bit says "is the row NA (for rows 2:n)"
# second bit says "is the row above *not* NA (for rows 1:(n-1))
# the & finds rows satisfying *both* conditions (first row always gets kept)
toRemove <- c(FALSE,is.na(newfile[-1,8])) & c(FALSE,!is.na(newfile[-n,8]))
toKeep <- !toRemove
newfile <- newfile[toKeep,]
Вы можете сделать все это в одной строке, еслиэто твоя вещь:
newfile <- newfile[ !(c(FALSE,is.na(newfile[-1,8])) & c(FALSE,!is.na(newfile[-nrow(newfile),8]))), ]