Повторная вставка NA в вектор
У меня есть вектор значений, которые включают в себя NA. Значения должны быть обработаны внешней программой, которая не может обработать NA, поэтому они удаляются, записываются в файл, обрабатываются, а затем считываются, что приводит к вектору длины числа не-NA., Например, предположим, что входное значение равно 7 3 4 NA 5 4 6 NA 1 NA, тогда выходное значение будет равно 7 значениям. Что мне нужно сделать, это снова вставить NA в положение.
Итак, учитывая два вектора X и Y:
> X
[1] 64 1 9 100 16 NA 25 NA 4 49 36 NA 81
> Y
[1] 8 1 3 10 4 5 2 7 6 9
производить:
8 1 3 10 4 NA 5 NA 2 7 6 NA 9
(вы можете заметить, что X это Y^2, это только для примера).
Я мог бы отключить функцию, чтобы сделать это, но мне интересно, есть ли какие-нибудь хорошие хитрые способы сделать это... split, list, length... ммм...
4 ответа
Еще один вариант на ту же тему
rena <- function(X,Z){
X[which(!is.na(X))]=Z
X
}
R автоматически заполняет остальное с помощью NA.
Изменить: Исправлено Марек.
na.omit
сохраняет атрибут местоположения NA
в оригинальной серии, так что вы можете использовать это, чтобы знать, куда поместить пропущенные значения:
Y <- sqrt(na.omit(X))
Z <- rep(NA,length(Y)+length(attr(Y,"na.action")))
Z[-attr(Y,"na.action")] <- Y
#> Z
# [1] 8 1 3 10 4 NA 5 NA 2 7 6 NA 9
Отвечать на мой собственный вопрос, вероятно, очень плохая форма, но я думаю, что это, вероятно, о ближайшем:
rena <- function(X,Z){
Y=rep(NA,length(X))
Y[!is.na(X)]=Z
Y
}