如何根据特定列的值从数据框构建矩阵?

时间:2016-07-19 21:06:56

标签: r matrix dataframe

我有一个名为df的数据框,如下所示:

Genes         ID          Type 
CFH         MB-0002       Gain 
CFHR3       MB-0002       Gain 
DEFB131     MB-0003       Gain 
UNC93B5     MB-0003       Loss 
CCDC125     MB-0004       Loss 
CCNB1       MB-0002       Gain
CFH         MB-0004       Loss
CCNB1       MB-0003       Gain   

我想构建一个矩阵,比如Mat,并将其写入csv文件,我将Genes作为行,IDs作为列。我想说:

    如果相应的类型为1 ,则为
  • Gain 如果相应的类型为-1
  • ,则为
  • Loss 在所有其他地方
  • 0

我的矩阵的例子是:

                MB-0002 MB-0003 MB-0004
   CFH              1       0      -1
   CFHR3            1       0       0
   DEFB131          0       1       0
   UNC93B5          0      -1       0
   CCDC125          0       0      -1
   CCNB1            1       1       0

1 个答案:

答案 0 :(得分:7)

尝试:

xtabs(c(1L, -1L)[Type] ~ ., data=df)
#         ID
#Genes     MB-0002 MB-0003 MB-0004
#  CCDC125       0       0      -1
#  CCNB1         1       1       0
#  CFH           1       0      -1
#  CFHR3         1       0       0
#  DEFB131       0       1       0
#  UNC93B5       0      -1       0

xtab()table()类似,不同之处在于它包含一个变量,其中包含每个级别组合的频率计数。您可以使用as.data.frame()将结果转换回数据框。

公式的左侧给出"计数" (在这种情况下,列出列联表的值)。它使用已知技巧使用索引将因子转换为数字向量(请参阅?factor)。右侧的.是"数据框"中其余变量的快捷方式,在这种情况下等同于Genes + ID

相关问题