我有一个名为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
答案 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
。