R:通过乘以两个单独的向量来填充缺失值(NA)

时间:2014-10-28 22:30:18

标签: r na

我正在大脑冻结。

这就是我所拥有的:

C <- c(C1, C2, C3)  # A constant for every row in the data frame
r <- c(r1, r2, r3, r4)   # A ratio for every column in the data frame

我的数据框如下所示:

     1    2    3   4
a   0.7  0.4   NA  NA
b    NA   NA  0.3  NA
c    NA  0.6   NA 0.4

我需要用C和r的乘法填充NA,使它看起来像这样:

      1      2     3        4
a    0.7    0.4   C1*r3   C1*r4
b   C2*r1  C2*r2   0.3    C2*r4
c   C3*r1   0.6   C3*r3    0.4

请注意,乘法仅针对NA进行,而不是针对已存在的数字进行。我知道is.na用于挑选NA,它可能只是线性代数,但我的大脑已经退出了一天。任何帮助都会很棒。

感谢。

1 个答案:

答案 0 :(得分:2)

如果mm是你的矩阵,你可以填写这样的缺失值:

mm[is.na(mm)] <- outer(C,r)[is.na(mm)]

数据示例:

mm <- read.table(text='   1    2    3   4
a   0.7  0.4   NA  NA
b    NA   NA  0.3  NA
c    NA  0.6   NA 0.4')

C <- c(1, 1, 1)  # A constant for every row in the data frame
r <- c(2, 2, 2, 2) 

mm[is.na(mm)] <- outer(C,r)[is.na(mm)]

#    X1  X2  X3  X4
# a 0.7 0.4 2.0 2.0
# b 2.0 2.0 0.3 2.0
# c 2.0 0.6 2.0 0.4