Замена НС из списка onle по NA во втором списке в равных положениях в R

57
4

вот проблема. У меня есть два списка векторов. Эти векторы имеют одинаковую длину в одинаковых положениях. Но в этих векторах есть некоторые НС. Данные могут выглядеть

HH
[[1]]
[1] 2 1 5 NA

[[2]]
[1] 2 0 5

[[3]]
[1] NA 1 NA

JJ
[[1]]
[1] 0 5 8 9

[[2]]
[1] NA 1 3

[[3]]
[1] 2 8 3

Моя цель: иметь NA в равных позициях в обоих списках во всех векторах. Точнее, напишите код, который найдет NA в первом списке, замените значение на NA во втором списке в равном положении. Я успешно написал аналогичную функцию для вектора, но я потерпел неудачу здесь. Вы можете мне помочь? Вот мой код.

D<-NULL
for(j in 1:length(PH)){
+ for(i in 1:length(PH[[j]])){
+ if(is.na(PH[[j]][i])==FALSE){
+ D[[j]][i]=AB[[j]][i]}
+ else{
+ D[[j]][i]=NA}}
+ }

спросил(а) 2015-10-05T12:05:00+03:00 4 года, 11 месяцев назад
1
Решение
69

Вот мои два цента. Получение данных из ответа @Colonel,

v1 <- unlist(firstlist)
v2 <- unlist(secondlist)
v1[is.na(v2)] <- NA
relist(v1, firstlist)

#[[1]]
#[1] NA "2" "3" NA

#[[2]]
#[1] "a" NA

ответил(а) 2015-10-05T12:21:00+03:00 4 года, 11 месяцев назад
69

Вы можете использовать Map:

Map(function(u,v) {v[is.na(u)]<-NA;v}, firstlist, secondlist)

Пример:

firstlist  = list(c(1,2,3,NA), c('a',NA))
secondlist = list(c(NA,22,33,5), c('b','d'))

#[[1]]
#[1] NA 22 33 NA

#[[2]]
#[1] "b" NA

ответил(а) 2015-10-05T12:13:00+03:00 4 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема