Это немного странно, чтобы объяснить. У меня есть два кадра данных. Первая - эталонная, вторая может иметь или не иметь отсутствующих значений. Оба блока данных имеют одни и те же переменные. Если во втором фрейме есть NA, я хочу создать новый фреймворк на основе эталонных значений, но удалить эту переменную, которая отсутствует. Каждая нечетная и четная переменные связаны. Поэтому, если нечетная переменная имеет значение NA, эта переменная + следующая переменная должна быть удалена в новом фреймворке данных. Если существует четная переменная с значением NA, переменная + предыдущая переменная должна быть удалена. Таким образом, var 1 и var 2 связаны между собой, var 3 и var 4, var 5 и var 6 и т. Д. Более или менее я работаю, но у моего кода возникают проблемы со значениями NULL.Попытка создания новых кадров данных с использованием ссылочного фрейма данных на основе значений NA от другого
is.odd <- function(x) x %% 2 == 1
apply(new, 1, function(x) {
if(is.odd(which(is.na(x)))) {
toremove=c(which(is.na(x)), which(is.na(x))+1)
}
if(!is.odd(which(is.na(x)))) {
toremove=c(which(is.na(x)), which(is.na(x))-1)
}
ref[,!(1:ncol(ref) %in% toremove), drop=F]
})
Ошибка я получаю "Ошибка если (is.odd (который (is.na (х)))) {: аргумент длина нуля".
Вот пример того, что я хочу. Первая ссылка dataframe:
var1 var2 var3 var4
1 q w e r
2 t y u i
3 o p a s
4 d f g h
второй имеет отсутствующие значения НС:
var1 var2 var3 var4
1 1 1 1 1
2 1 3 2 NA
3 1 NA a s
4 d f g h
Каждая строка второго dataframe используется для создания нового dataframe, основываясь на эталонных значений. Для первой строки вывод должен быть полным, поскольку нет NAs:
var1 var2 var3 var4
1 q w e r
2 t y u i
3 o p a s
4 d f g h
Для второй строки вывод должен отсутствовать 3-й и 4-й переменной, так как 4-й имел NA и 3 + 4 (нечетное + четное) относятся к. :
var1 var2
1 q w
2 t y
3 o p
4 d f
Обновление: Я думаю, что проблема, с которой (is.na (х) возвращение числовой (0) Я пытаюсь контролировать для этого с:.
if(!identical(which(is.na(x))), numeric(0)) {}
Но это Безразлично «т, кажется, соответствие.
Вы должны, по крайней мере, ссылка на предыдущий пост, так как я ответил на вопрос, есть и дайте мне знать вы задавали новый вопрос: http://stackoverflow.com/questions/34537091/comparing-two-data-frames-and-deleting-rows-based-on-na-values-in-one-data-frame – fishtank
@ fishtank жаль, что не связывал предыдущий пост. Ваш ответ оказался самым простым решением. – JJL