【问题标题】:Transform table to 0 and 1 for a given threshold对于给定的阈值,将表转换为 0 和 1
【发布时间】:2012-10-07 14:17:34
【问题描述】:

我有一张表(t1)如下:

t1 <- array(1:20, dim=c(10,10))

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1   11    1   11    1   11    1   11    1    11
 [2,]    2   12    2   12    2   12    2   12    2    12
 [3,]    3   13    3   13    3   13    3   13    3    13
 [4,]    4   14    4   14    4   14    4   14    4    14
 [5,]    5   15    5   15    5   15    5   15    5    15
 [6,]    6   16    6   16    6   16    6   16    6    16
 [7,]    7   17    7   17    7   17    7   17    7    17
 [8,]    8   18    8   18    8   18    8   18    8    18
 [9,]    9   19    9   19    9   19    9   19    9    19
[10,]   10   20   10   20   10   20   10   20   10    20

我想将此表转换为 1 或 0。如果单元格数 >5,我们给它一个 1,如果单元格数

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    0   1    0   1    0    1    0    1    0    1
 [2,]    0   1    0   1    0    1    0    1    0    1
 [3,]    0   1    0   1    0    1    0    1    0    1
 [4,]    0   1    0   1    0    1    0    1    0    1
 [5,]    0   1    0   1    0    1    0    1    0    1
 [6,]    1   1    1   1    1    1    1    1    1    1
 [7,]    1   1    1   1    1    1    1    1    1    1
 [8,]    1   1    1   1    1    1    1    1    1    1
 [9,]    1   1    1   1    1    1    1    1    1    1
[10,]    1   1    1   1    1    1    1    1    1    1

我应该使用哪些命令?

【问题讨论】:

    标签: r transform


    【解决方案1】:

    您可以只使用ifelse() 声明:

    ifelse(t1 > 5, 1, 0)
    

    由于像t1 &gt; 5 这样的语句将产生TRUEFALSE 的矩阵,并且由于R 将TRUE 视为“1”和FALSE 视为“0”,因此特定的转换,你也可以这样做:

    (t1 > 5)+0
          [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
     [1,]    0    1    0    1    0    1    0    1    0     1
     [2,]    0    1    0    1    0    1    0    1    0     1
     [3,]    0    1    0    1    0    1    0    1    0     1
     [4,]    0    1    0    1    0    1    0    1    0     1
     [5,]    0    1    0    1    0    1    0    1    0     1
     [6,]    1    1    1    1    1    1    1    1    1     1
     [7,]    1    1    1    1    1    1    1    1    1     1
     [8,]    1    1    1    1    1    1    1    1    1     1
     [9,]    1    1    1    1    1    1    1    1    1     1
    [10,]    1    1    1    1    1    1    1    1    1     1
    

    【讨论】:

    • 一个更快的解决方案是使用显式转换:fasterFun &lt;- function(x) {y &lt;- x&gt;5; storage.mode(y) &lt;- "numeric"; y}
    【解决方案2】:

    我还没有计时,但是ifelse 的替代方法就是使用条件语句。

    foo &lt;- bar &lt; 5 哦,该死,Julius 以 10 秒的优势击败了我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多