我有一个名为“wc”的数据框,格式如下
PARENT_MOL_CHEMBL_ID TARGET_TYPE
C10 ABL
C10 EGFR
C939 TP53
我想以下列格式重塑矩阵: 期望的输出
PARENT_MOL_CHEMBL_ID ABL EGFR TP53
C10 1 1 0
C939 0 0 1
我在R中读过reshape包。 我尝试过调用强制转换功能,但它不起作用。
cast(wc,PARENT_MOL_CHEMBL_ID~TARGET_TYPE, value = "TARGET_TYPE")
我不明白我应该在值部分使用什么参数。请指导我如何将data.frame转换为所需的形状。
如果有更好的替代品,如plyr功能,请同样强调替代品。谢谢
答案 0 :(得分:4)
OP要求帮助cast()
包的reshape
函数的参数。但是,reshape
包已被同一包作者的reshape2
包取代。根据包描述,reshape2
包是
重新整形包重新启动
使用reshape2
,可以使用
reshape2::dcast(wc, PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# PARENT_MOL_CHEMBL_ID ABL EGFR TP53
#1 C10 1 1 0
#2 C939 0 0 1
BTW:data.table
包也实现了(并增强了)dcast()
。因此,使用
data.table::dcast(wc, PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
数据框中的OP mentioned其他列应与 spread 或 wide 数据一起显示。不幸的是,OP还没有提供特定的样本数据,因此我们必须考虑两个用例。
数据看起来像
wc
# PARENT_MOL_CHEMBL_ID TARGET_TYPE extra_col1
#1 C10 ABL a
#2 C10 EGFR a
#3 C939 TP53 b
请注意extra_col1
中的值与PARENT_MOL_CHEMBL_ID
一致。
这是一个简单的案例,因为dcast()
中的公式接受...
,它代表公式中未使用的所有其他变量:
reshape2::dcast(wc, ... ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# PARENT_MOL_CHEMBL_ID extra_col1 ABL EGFR TP53
#1 C10 a 1 1 0
#2 C939 b 0 0 1
生成的data.frame确实包含所有其他列。
现在,又添加了一列:
wc
# PARENT_MOL_CHEMBL_ID TARGET_TYPE extra_col1 extra_col2
#1 C10 ABL a 1
#2 C10 EGFR a 2
#3 C939 TP53 b 3
请注意,extra_col2
有C10
的两个不同值。这将导致简单的方法失败。因此,必须实施两步方法:首先重新整形,然后与原始数据框一起加入。现在,data.table
包用于这两个步骤:
library(data.table)
# reshape from long to wide, result has only one row per id column
wide <- dcast(setDT(wc), PARENT_MOL_CHEMBL_ID ~ TARGET_TYPE, fun.aggregate = length,
value.var = "TARGET_TYPE")
# right join, i.e., all rows of wc are included
wide[wc, on = "PARENT_MOL_CHEMBL_ID"]
# PARENT_MOL_CHEMBL_ID ABL EGFR TP53 TARGET_TYPE extra_col1 extra_col2
#1: C10 1 1 0 ABL a 1
#2: C10 1 1 0 EGFR a 2
#3: C939 0 0 1 TP53 b 3
结果以宽格式显示聚合值以及任何其他列。
答案 1 :(得分:1)
show()
结果是:
toimage()
更多信息:http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/