R刚起步。我想做的是将矩阵中的所有数字都说成5及以下。例如,如果矩阵是这样的:
1 3 2 5 7
3 8 3 6 2
我想加入:
1 3 2 5 5
3 5 3 5 2
我觉得必须有比每次手动完成更有效的方法。任何帮助,将不胜感激。
答案 0 :(得分:6)
是的,你可以
mat[mat > 5] <- 5
# V1 V2 V3 V4 V5
#[1,] 1 3 2 5 5
#[2,] 3 5 3 5 2
@Gregor拥有最聪明的解决方案,但只要为您提供更多选择,您就可以做到
ifelse(mat > 5, 5, mat)
或者如@Sotos所述
replace(mat, mat > 5, 5)
答案 1 :(得分:4)
使用pmin
或pmax
可以很容易地执行元素级的最小值或最大值。在这种情况下,将矩阵中的内容与5比较时,您需要最小值。
pmin(m1, 5)
# V1 V2 V3 V4 V5
#[1,] 1 3 2 5 5
#[2,] 3 5 3 5 2
p 表示 parallel ,表示比较是逐元素进行的。 min()
或max()
当然会给出全局最小值/最大值,只是一个结果。 pmin
/ pmax
通常适用于两个长度相等的向量。在这里,我们利用“回收”的优势,输入5
会自动扩展(“回收”)以具有与输入相同的长度。