在第二个列表中的NAs中替换来自onle列表的NAs在R中的相等位置

时间:2015-10-05 09:05:02

标签: r list

这是问题所在。我有两个向量列表。那些向量在相同位置具有相同的长度。但是这些载体中有一些NA。数据可能看起来像

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

我的目标是:在所有向量的两个列表中将NAs置于相同的位置。更确切地说,写入代码,在第一个列表中找到NA,nad在第二个列表中以相等的位置替换NA。我成功地为vector写了类似的函数,但我在这里失败了。你能帮助我吗?这是我的代码。

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}}
+ }

2 个答案:

答案 0 :(得分:2)

您可以使用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 

答案 1 :(得分:2)

这是我的两分钱。从@ 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