Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何基于特定列的值从数据帧构建矩阵?_R_Matrix_Dataframe - Fatal编程技术网

R 如何基于特定列的值从数据帧构建矩阵?

R 如何基于特定列的值从数据帧构建矩阵?,r,matrix,dataframe,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

我有一个名为
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
文件,在那里我将把基因作为行,
id
作为列。我想提出:

  • 1
    如果对应的类型是
    Gain
  • -1
    如果对应类型为
    损失
  • 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
尝试:

xtab()
table()
类似,只是它采用了一个变量,该变量包含每个级别组合的频率计数。您可以使用
as.data.frame()
将结果转换回数据帧


公式的左侧给出了“计数”(在这种情况下,列联表将填充的值)。它使用已知的技巧,使用索引将因子转换为数字向量(请参见
?因子
)。右边的
是“数据框中其余变量”的捷径,在这种情况下,它相当于
基因+ID

实际上需要的解释是LHS表达式。我盯着它看的时间比我通常需要R代码的时间长。它很可爱,但对于新的R用户来说可能有点晦涩。@ernest-a谢谢。它起作用了。然而,我尝试了以下代码:
对于(I in 1:nrow(df)){if(df$Type[I]='Gain'){Mat[df$Genes[I],df$ID[I]]@rawr不,我使用了答案。我只是好奇为什么我的代码不起作用。谢谢编辑!@m0h3n
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