2017-01-31 4 views
0

У меня есть кадр данных в R, который я бы хотел перестроить. Рассмотрим следующий пример:Повторно организовать кадр данных R - за разрешением reshape2 (я думаю)

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) 

дает следующее:

> 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 

Я хотел бы реорганизовать данные, как например:

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 

Я попытался с помощью reshape2 и я могу получить от длинного до широкого формата, но я не уверен, как продвигаться из беспорядка НС в сводный список.

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

Любая помощь будет принята с благодарностью и благодарю вас.

ответ

2

Вы можете сделать это с dplyr следующим образом:

library(dplyr) 

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

Результат:

# 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

или вы можете использовать 'nest':' df_new = ДФ%>% гнездо (образцы) ', который дает вам размерную длину переменной для каждой группы – lbusett

Смежные вопросы