我想检查此矩阵m是否为<= 1或> =10。如果是,我想更改另一个向量val的值。如果val为“ A”,则应将其更改为“ B”,反之亦然。如果val为“ C”,则应将其更改为“ D”,反之亦然。如果矩阵m中没有任何值<= 1或> = 10,则它应返回val。
m
x y
[1,] 2 11
[2,] 4 6
[3,] 5 6
[4,] 0 6
[5,] 2 6
val = "A"
因此,输出应为
out
"B"
我目前拥有的是以下
x = m[, 1]
y = m[, 2]
x.test = any(x <= 1)
x.test = cbind(x.test, any(x >= 10) )
y.test = any(y <= 1)
y.test = cbind(y.test, any(y >= 10) )
if (any(x.test)==TRUE || any(y.test)==TRUE && val == 'A')
{ val2 = 'B'
} else if (any(x.test)==TRUE || any(y.test)==TRUE && val == 'B')
{ val2 = 'A'
} else if (any(x.test)==TRUE || any(y.test)==TRUE && val == 'C')
{val2 = 'D'
} else if (any(x.test)==TRUE || any(y.test)==TRUE && val == 'D')
{val2 = 'C'
} else { val2 = val }
但似乎很麻烦,而且效果不佳...
您可以创建一个像字典一样工作的数据框,并在val2
满足条件的情况下帮助您找到相应的数据框。同时,您无需分别测试矩阵的每一列,就像一个D向量一样,一个语句就足够了:
dicFrame <- data.frame(val = c("A", "B", "C", "D"), val2 = c("B", "A", "D", "C"), stringsAsFactors = F)
# val val2
#1 A B
#2 B A
#3 C D
#4 D C
val = "A"
val2 = if(any(mat >= 10 | mat <= 1)) dicFrame[dicFrame$val == val, 'val2'] else val
val2
# [1] "B"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句