如何找到表格中每个值的Z得分?

时间:2015-08-10 19:04:13

标签: r statistics

我在R中有一个表,如何在行中创建一个大于或等于某个数字a 1的值,其余的值为0.例如,如果我的特殊数字是4,那么我表中4和4以上的每个值都是1,其余值都是0。例如,然后这个表:

         a  b  c  d  e 
Bill     1  2  3  4  5
Susan    4  1  5  4  2
Malcolm  4  5  6  2  1 
Reese    0  0  2  3  8

        Would Turn Into
         a  b  c  d  e 
Bill     0  0  0  1  1
Susan    1  0  1  1  0
Malcolm  1  1  1  0  0 
Reese    0  0  0  0  1

1 个答案:

答案 0 :(得分:5)

我们可以创建TRUE/FALSE的逻辑矩阵,并使用+

转换为二进制格式
   +(df1>=4)
   #        a b c d e
   #Bill    0 0 0 1 1
   #Susan   1 0 1 1 0
   #Malcolm 1 1 1 0 0
   #Reese   0 0 0 0 1

为了清楚起见,当我们执行>=时,它会创建一个TRUE/FALSE的逻辑矩阵

   df1 >=4
   #            a     b     c     d     e
   #Bill    FALSE FALSE FALSE  TRUE  TRUE
   #Susan    TRUE FALSE  TRUE  TRUE FALSE
   #Malcolm  TRUE  TRUE  TRUE FALSE FALSE
   #Reese   FALSE FALSE FALSE FALSE  TRUE

但是,OP希望将其转换为1/0。通过将TRUE / FALSE强制转换为二进制形式,有很多方法可以做到这一点。一个选项是

  (df1>=4) + 0L 

或者

  (df1>=4)*1L

或者只是放一个+就可以进行强制攻击

  +(df1>=4)

根据?TRUE

  

逻辑向量在上下文中被强制转换为整数向量        数值是必需的,'TRUE'映射到'1L',        “FALSE”为“0L”,“NA”为“NA_integer _”。

我们也可以用as.integer换行,但输出将是一个向量

 as.integer(df1>=4)
 #[1] 0 1 1 0 0 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1

如果我们将输出分配回原始数据集,我们可以更改该数据集并保持其结构

  df1[] <- as.integer(df1>=4)
  df1
  #        a b c d e
  #Bill    0 0 0 1 1
  #Susan   1 0 1 1 0  
  #Malcolm 1 1 1 0 0
  #Reese   0 0 0 0 1