R:将矩阵与0和NAs相乘,在列表上产生不同的结果
我想乘以矩阵,一个包含值和0,另一个包含而不是0 NAs(这很重要)。这是一个关于两个旧问题(和)的新问题,因为我无法将这两个答案结合到最终解决方案中。以下是一些示例数据:R:将矩阵与0和NAs相乘,在列表上产生不同的结果,r,list,R,List,我想乘以矩阵,一个包含值和0,另一个包含而不是0 NAs(这很重要)。这是一个关于两个旧问题(和)的新问题,因为我无法将这两个答案结合到最终解决方案中。以下是一些示例数据: A <- list("111"= matrix(c(NA,NA,100,200,NA,NA), nrow = 1, byrow = T), "112"= matrix(c(10,90,NA,30,10,90),
A <- list("111"= matrix(c(NA,NA,100,200,NA,NA),
nrow = 1, byrow = T),
"112"= matrix(c(10,90,NA,30,10,90),
nrow = 1, byrow = T))
B <- list("111.2012"=matrix(c(1, 0, 6, 0, 1, 0),
nrow = 1, byrow = T),
"112.2012"=matrix(c(6, 2, 2, 0, 3, 1),
nrow = 1, byrow = T),
"111.2011"=matrix(c(3, 2, 0, 0, 1, 9),
nrow = 1, byrow = T),
"112.2011"=matrix(c(1, 2, 0, 0, 7, 0),
nrow = 1, byrow = T))
通过将0(在B中)与值(在a中)相乘,我得到0,并将值(在B中)与NA(在a中)相乘,我得到NA,这对我来说是真实的和完全正确的。然而,当我将0(B)与NA(A)相乘时,我得到了NA,这可能是真的。但是有没有办法得到0(这是我的问题2,但不包括1)
为此,我得到了答案(问题2):
注意:在元素一($'111.2012')中,第二个和第六个条目是0,就像元素四($'112.2011')第三个条目一样。只需添加一个
replace
,即Map(函数(x,y)replace(a[[y]],x==0,0)*x,B,gsub('\..*','',名称(B))
Map(function(x,y) A[[y]]*x, B, gsub('\\..*','',names(B)))
B*`[<-`(A,B==0,0)
Map(function(x,y) A[[y]]*`[<-`(x,A[[y]]==0,0),B,sub('\\..*','',names(B)))
> res
$`111.2012`
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA 0 600 0 NA 0
$`112.2012`
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 60 180 NA 0 30 90
$`111.2011`
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA NA 0 0 NA NA
$`112.2011`
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 10 180 0 0 70 0