如果表B中有非零值可用,将表A中的零值替换为表B中的非零值

3

我有以下数据:

tableA <- structure(c(0L, 0L, 6L, 0L, 6L, 0L, 3L, 0L, 0L), dim = c(3L, 
3L), dimnames = structure(list(c("0.3", "0.4", 
"0.6"), c("A", "B", "C")), names = c("", "")), class = "table")

      A B C
  0.3 0 0 3
  0.4 0 6 0
  0.6 6 0 0

tableB <-structure(c(0L, 1L, 2L, 0L, 3L, 0L, 3L, 2L, 0L), dim = c(3L, 
3L), dimnames = structure(list(c("0.3", "0.4", 
"0.6"), c("A", "B", "C")), names = c("", "")), class = "table")

      A B C
  0.3 0 0 3
  0.4 1 3 2
  0.6 2 0 0

如果tableB中有正数值可用,我希望将tableA中的所有零替换为这些正数,并标记出来。

最简单的方法是什么?

期望输出:

      A B C
  0.3 0 0 3
  0.4 1 6 2
  0.6 6 0 0

额外的问题在于我希望知道哪些值被替换了,但这似乎很难实现。

4个回答

3
tableA 中基于值为 0 的位置使用 ==,结合来自 tableB 的正数值(> 0),创建逻辑索引并进行赋值操作。
i1 <- tableA == 0 & tableB > 0
tableA[i1] <- tableB[i1]

-输出

> tableA
     
      A B C
  0.3 0 0 3
  0.4 1 6 2
  0.6 6 0 0

0
我们可以像下面这样使用!tableA作为掩码。
> (!tableA) * tableB + tableA

      A B C
  0.3 0 0 3
  0.4 1 6 2
  0.6 6 0 0

0

另一种方法

ifelse(tableA == 0 & tableB > 0 , tableB , tableA)

0

另一个可能的解决方案:

ifelse(tableA == 0, pmax(tableB,0), tableA)

#>      
#>       A B C
#>   0.3 0 0 3
#>   0.4 1 6 2
#>   0.6 6 0 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接