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