R:使用0和NAs乘以df /矩阵导致不同的结果

时间:2015-12-04 11:13:29

标签: r

我想将df与矩阵相乘。 df具有0值,矩阵具有NA值(这很重要)。通过将0(以df为单位)与值(在垫子中)相乘得到0并且通过将值(在df中)与NA(在垫子中)相乘,我得到NA,这对我来说是真实的并且完全没问题。但是,当我将0(df)与NA(mat)相乘时,我得到NA,这可能是真的。但有没有办法获得0?因为我对那些0感兴趣。这里有一些示例数据:

if($('#fullpage').length){
    $('#fullpage').fullpage();
}

我的预期结果(e中为0):

df0 <- data.frame(a=1, b=0, c=2, d=5, e=0)
mat0 <- matrix(c(NA,2,NA,4,NA),nrow=1, ncol=5)
df_mat0 <- df0 * mat0

想法?感谢

3 个答案:

答案 0 :(得分:1)

一种方法是将mat0中的那些NA替换为df0中乘以0的0。我不确定这个解决方案有多普遍(即它能与您的实际数据集一起使用吗?):

mat0[df0 == 0][is.na(mat0[df0 == 0])] <- 0
df0 * mat0

结果:

   a b  c  d e
1 NA 0 NA 20 0

答案 1 :(得分:1)

作为替代方案:

似乎ifelse就足够了:

unlist(ifelse(df0 == 0L, 0, mat0 * df0))
[1] NA  0 NA 20  0

在这种情况下,它会处理0个案例。

答案 2 :(得分:1)

直接用mat0覆盖0中的值,而是创建一个临时对象,或者更简单地使用以下代码行

df0*`[<-`(mat0,df0==0,0)
#   a b  c  d e
#1 NA 0 NA 20 0

功能

`[<-`(a,b,c)

返回a[b]=c但实际上不会更改a本身。

编辑:根据OP的请求(请参阅下面的评论),这里有更多代码。

我认为A[[y]]x分别对应df0mat0。如果是这样,请尝试

Map(function(x,y) A[[y]]*`[<-`(x,A[[y]]==0,0),B,sub('\\..*','',names(B)))