2017-01-31 1 views
0

Ich habe einen Datenrahmen in R, den ich gerne neu organisieren würde. Beachten Sie Folgendes:R Datenrahmen neu organisieren - jenseits von reshape2 (glaube ich)

samples=c("167_1", "167_2", "167_3", "167_4", "167_5", "167_6", "167_7", "167_8", "167_9", "167_10", "167_11", "167_12", "167_13", "167_14", "167_15") 
condition=c("Group4", "Group7", "Group8", "Group3", "Group4", "Group2", "Group6", "Group1", "Group2", "Group9", "Group7", "Group8", "Group3", "Group5", "Group5") 
df=data.frame(samples, condition) 

Gibt folgendes:

> head(df) 
    samples condition 
1 167_1 Group4 
2 167_2 Group7 
3 167_3 Group8 
4 167_4 Group3 
5 167_5 Group4 
6 167_6 Group2 

würde Ich mag die Daten als solche neu zu organisieren:

condition samples  
Group1  167_8 
Group2  167_6, 167_9 
Group3  167_13, 167_4 
Group4  167_1, 167_5 
Group5  167_14, 167_15 
Group6  167_7 
Group7  167_11, 167_2 
Group8  167_12, 167_3 
Group9  167_10 

Ich habe mit reshape2 versucht, und ich kann vom langen zum großen Format, aber ich bin mir nicht sicher, wie ich vom Chaos der NAs zu einer zusammengefaßten Liste komme.

library(reshape2) 
dcast(df, condition ~ samples) 

Jede Hilfe wäre sehr dankbar und danke.

Antwort

2

Sie können mit dplyr dies wie folgt tun:

library(dplyr) 

df %>% 
    group_by(condition) %>% 
    summarise(samples = paste(samples, collapse = ", ")) 

Ergebnis:

# A tibble: 9 × 2 
    condition  samples 
    <fctr>   <chr> 
1 Group1   167_8 
2 Group2 167_6, 167_9 
3 Group3 167_4, 167_13 
4 Group4 167_1, 167_5 
5 Group5 167_14, 167_15 
6 Group6   167_7 
7 Group7 167_2, 167_11 
8 Group8 167_3, 167_12 
9 Group9   167_10 
+0

oder können Sie 'nest':' df_new = df%>% Nest (Proben) ', die gibt Ihnen ein tibble mit variabler Länge für jede Gruppe – lbusett