根据一列重构R中的数据帧

时间:2013-11-22 16:29:33

标签: r dataframe reshape

我有一个这样的数据框:

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但它不起作用

3 个答案:

答案 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