我有一个像这样的矩阵
df <- matrix(c(rep(1,3),rep(2,3)),nrow=3,ncol=2)
df:
[,1] [,2]
[1,] 1 2
[2,] 1 2
[3,] 1 2
我想将每个单元格值转换为YES
,如果大于0,则为NO
我知道我可以使用
执行此操作apply(df, 2, function(x) ifelse(x > 0, "Yes","No"))
然而,我的矩阵非常庞大(百万* 5000),因此使用apply会花费极大的时间
我也试过
df <- ifelse(df > 0, "Yes","No")
然而,即使这需要很多时间
我能用这个获得更好的表现吗?
答案 0 :(得分:5)
这是创建矩阵的一种方法:
df[] <- c("No", "Yes")[(df > 0) + 1]
结果:
[,1] [,2]
[1,] "Yes" "Yes"
[2,] "Yes" "Yes"
[3,] "Yes" "Yes"
答案 1 :(得分:0)
如果您的目标是直观地检查矩阵,而不是使用内容,则symnum
功能专门用于此用途。 ?symnum
的“说明”部分说明了
符号编码给定的数字或逻辑向量或数组。特别适用于结构化矩阵的可视化,例如相关性,稀疏性或逻辑性矩阵。
symnum(df, cutpoints=c(-Inf, 0, Inf), symbols=c("no", "yes"))
[1,] yes yes
[2,] yes yes
[3,] yes yes