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

Ras*_*wad 4 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   
Run Code Online (Sandbox Code Playgroud)

我想构建一个矩阵,Mat并将其写入一个csv文件,我将Genes作为行和IDsas列.我想说:

  • 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
Run Code Online (Sandbox Code Playgroud)

Ern*_*t A 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
Run Code Online (Sandbox Code Playgroud)

xtab()类似于table()它除了它采用包含每个级别组合的频率计数的变量.您可以将结果转换回数据框as.data.frame().

公式的左侧给出"计数"(在这种情况下,列出列联表的值).它使用已知技巧使用索引将因子转换为数字向量(请参阅参考资料?factor).的.上右手侧是短切为"在数据帧中的所述变量的其余部分",在这种情况下,相当于Genes + ID.

  • 实际上,所需的解释是LHS表达式.我盯着它的时间比我通常需要的R代码要长.它很可爱,但对于新的R用户来说可能有点模糊. (4认同)