我有以下数据:
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
我想将tableA
中的所有零替换为tableB
中的正值,如果它们可用,并以某种方式标记它们。
实现这一点最简单的方法是什么?
所需输出:
A B C
0.3 0 0 3
0.4 1 6 2
0.6 6 0 0
附加的问题是,我想知道哪些值被替换了,但这似乎很难实现。
根据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
我们可以使用!tableA
作为蒙版,如下图
> (!tableA) * tableB + tableA
A B C
0.3 0 0 3
0.4 1 6 2
0.6 6 0 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
另一种方法
ifelse(tableA == 0 & tableB > 0 , tableB , tableA)