2013-11-22 4 views
2

У меня есть кадр данных, как это:Перестройка кадр данных в R по одной колонке

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, но это не работает

ответ

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

Спасибо! Он отлично работает! – user976991

+0

@ user976991 рад быть полезным, вы можете принять ответ, если он поможет вам решить вашу проблему/вопрос. –

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 
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 
Смежные вопросы