我有一个这样的数据框:
TargetID Gene
cg26365299 HOXA9
cg26476852 HOXA9
cg26492446 BHLHE23
cg26521404 HOXA9
cg26531174 CDX1
cg26595643 VAX1
我希望它成为这种形状
Gene TargetID
HOXA9 cg26365299;cg26476852;cg26521404
BHLHE23 cg26492446
CDX1 cg26531174
VAX1 cg26595643
我尝试使用dcast但它不起作用
答案 0 :(得分:4)
使用aggregate
。考虑df
是您的data.frame:
> aggregate(TargetID~Gene, data=df, paste0, collapse=";")
Gene TargetID
1 BHLHE23 cg26492446
2 CDX1 cg26531174
3 HOXA9 cg26365299;cg26476852;cg26521404
4 VAX1 cg26595643
答案 1 :(得分:1)
另一种可能性。
ll <- lapply(unstack(df), paste0, collapse = ";")
data.frame(TargetID = names(ll), Gene = unlist(ll), row.names = NULL)
# TargetID Gene
# 1 BHLHE23 cg26492446
# 2 CDX1 cg26531174
# 3 HOXA9 cg26365299;cg26476852;cg26521404
# 4 VAX1 cg26595643
答案 2 :(得分:0)
使用plyr
的另一个选项:
ddply(df,.(Gene),summarise,TargetID=paste(TargetID,collapse=";"))
Gene TargetID
1 BHLHE23 cg26492446
2 CDX1 cg26531174
3 HOXA9 cg26365299;cg26476852;cg26521404
4 VAX1 cg26595643