这是问题所在。我有两个向量列表。那些向量在相同位置具有相同的长度。但是这些载体中有一些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}}
+ }
答案 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