R Ifelse条件覆盖在面具上
我有个问题。假设我有一个数据集a: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
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