Я хочу получить индекс, который ссылается на позиции значений NA в матрице, где индекс является истинным, если заданная ячейка является NA и существует по меньшей мере одно значение не-NA до и после него в столбце. Например, учитывая следующую матрицу:Получить позиции для NA только в «середине» столбца матрицы
[,1] [,2] [,3] [,4]
[1,] NA 1 NA 1
[2,] 1 NA NA 2
[3,] NA 2 NA 3
Единственное значение индекса, которое возвращается TRUE, должно быть [2,2].
Есть ли компактное выражение для того, что я хочу сделать? Если бы мне пришлось перебирать столбцы и использовать что-то вроде min(which(!is.na(x[,i])))
, чтобы найти первое значение, отличное от NA, в каждом столбце, а затем установить для всех значений до этого значение FALSE (и то же самое для всех значений после max). Таким образом, я бы не выбрал начальные и конечные значения NA. Но это кажется немного грязным, поэтому мне интересно, есть ли более чистое выражение, которое делает это без циклов.
EDIT Для того чтобы иметь значение, значение NA должно иметь значение не-NA до и после него где-то внутри столбца, но не обязательно рядом с ним. Например, если столбец был определен c (NA, 3, NA, NA, NA, 4, NA), то NA, которые я хочу найти, будет в позициях 3, 4 и 5, так как они заключены в не-NA.
[2,3] также не может быть возвращен? – daroczig
daroczig - нет, потому что нет значения не-NA до и после него в столбце. – Abiel
спасибо, я должен был более внимательно прочитать ваш вопрос. Я попытался составить векторный ответ на основе ваших данных, я надеюсь, что он может работать на вас. – daroczig