R:将矩阵转换为YES,无数据帧

时间:2017-08-15 06:40:16

标签: r matrix dataframe apply

我有一个像这样的矩阵

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")

然而,即使这需要很多时间

我能用这个获得更好的表现吗?

2 个答案:

答案 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