R Ifelse条件覆盖在面具上

R Ifelse条件覆盖在面具上,r,if-statement,R,If Statement,我有个问题。假设我有一个数据集a: row1 row2 row3 col1 2 3 5 col2 5 3 4 col3 3 1 6 我有一个面具,可以识别这些条目,应该进行转换: row1 row2 row3 col1 T F F col2 F F T col3 F T F 因此,基本上,我希望所有标记为TRUE(T)的条目都替换为它们现在的值减去另一个数据集b的值: row1

我有个问题。假设我有一个数据集a:

     row1 row2 row3
col1  2    3    5
col2  5    3    4
col3  3    1    6
我有一个面具,可以识别这些条目,应该进行转换:

     row1 row2 row3
col1  T    F    F
col2  F    F    T
col3  F    T    F
因此,基本上,我希望所有标记为TRUE(T)的条目都替换为它们现在的值减去另一个数据集b的值:

     row1 row2 row3
col1  1    4    8
col2  4    1    1
col3  6    2    7
因此,结果应该是:

     row1 row2 row3
col1  1    3    5
col2  5    3    3
col3  3   -1    6
我尝试的是:

new_dataset <- ifelse(Mask == 'FALSE', a, a - b)

new_dataset假设所有的数据集都是
data.frame
s,我们将'i1'(即真/假数据集转换为
矩阵
,使用它从'a'和'b'中提取元素,减去相应的元素并将其分配给'i1'的'a'

i2 <- as.matrix(i1)
a[i2] <- a[i2] - b[i2]
a
#     row1 row2 row3
#col1    1    3    5
#col2    5    3    3
#col3    3   -1    6

假设所有的数据集都是
data.frame
s,我们将'i1'(即真/假数据集转换为
matrix
,使用它从'a'和'b'中提取元素,减去相应的元素并将其分配给'i1'的'a'

i2 <- as.matrix(i1)
a[i2] <- a[i2] - b[i2]
a
#     row1 row2 row3
#col1    1    3    5
#col2    5    3    3
#col3    3   -1    6

您可以执行
a-b*掩码

a - b * mask
#      row1 row2 row3
# col1    1    3    5
# col2    5    3    3
# col3    3   -1    6
它适用于数据帧和矩阵:

as.data.frame(a) - as.data.frame(b) * as.data.frame(mask)
#      row1 row2 row3
# col1    1    3    5
# col2    5    3    3
# col3    3   -1    6

as.matrix(a) - as.matrix(b) * as.matrix(mask)
#      row1 row2 row3
# col1    1    3    5
# col2    5    3    3
# col3    3   -1    6

您可以执行
a-b*掩码

a - b * mask
#      row1 row2 row3
# col1    1    3    5
# col2    5    3    3
# col3    3   -1    6
它适用于数据帧和矩阵:

as.data.frame(a) - as.data.frame(b) * as.data.frame(mask)
#      row1 row2 row3
# col1    1    3    5
# col2    5    3    3
# col3    3   -1    6

as.matrix(a) - as.matrix(b) * as.matrix(mask)
#      row1 row2 row3
# col1    1    3    5
# col2    5    3    3
# col3    3   -1    6
另一种方法是:

res <- a-b
w <- which(mask==F, arr.ind = T)
res[w] <- a[w]
res另一种方法:

res <- a-b
w <- which(mask==F, arr.ind = T)
res[w] <- a[w]
res