2016-09-15 6 views
0

У меня есть набор данных, который включает количество людей из разных генетических линий (линий) плодовых мух в исследовании (n) и количество, которое выжило (живое). Это разбивается на репликантов (репы), что кадр данных выглядит так:Преобразование данных о выживаниях в данные биномиального счета в R?

line rep n alive trt 
1 21 1 5 2  control 
2 21 2 5 4  control 
3 26 1 5 1  control 
4 26 2 5 4  control 

Для того, чтобы соответствовать биномиальной модели, я хочу, чтобы преобразовать дробь (живой/п) для подсчета данных. До сих пор я делал это вручную (что очень кропотливый) создание dataframe вроде этого:

line rep trt  surv 
1  21 1 control 0 
2  21 1 control 0 
3  21 1 control 0 
4  21 1 control 1 
5  21 1 control 1 
6  21 2 control 0 
7  21 2 control 1 
8  21 2 control 1 
9  21 2 control 1 
10 21 2 control 1 
11 26 1 control 0 
12 26 1 control 0 
13 26 1 control 0 
14 26 1 control 0 
15 26 1 control 1 
16 26 2 control 0 
17 26 2 control 1 
18 26 2 control 1 
19 26 2 control 1 
20 26 2 control 1 

Это позволяет мне создать модель, где выживание является переменным отклик, взаимодействие между линией и лечением (ТРТ) является основным эффектом, а rep - случайным эффектом. Модель работает, проблема заключается в том, сколько времени требуется для ее создания (у меня в общей сложности 139 строк с 5 повторениями каждый). Может ли кто-нибудь помочь мне либо создать функцию, показать мне функцию или пакет, который мне поможет? есть ли более простой способ сделать это?

Спасибо заранее,

Phil

ответ

1

С вашими данными выборки

dd<-read.table(text=" line rep n alive trt 
1 21 1 5 2  control 
2 21 2 5 4  control 
3 26 1 5 1  control 
4 26 2 5 4  control", header=T) 

Вы можете использовать dplyr и tidyr помочь ...

библиотека (dplyr) библиотека (tidyr)

dd %>% mutate(dead=n-alive) %>% select(-n) %>% 
    gather(status, count, c(alive,dead)) %>% 
    slice(rep(1:n(), .$count)) %>% select(-count) %>% 
    transform(surv=ifelse(status=="alive",1,0), status=NULL) %>% 
    arrange(line, rep, trt, surv) 

Мы используем gather() для создания отдельных строк для surv=0 и surv=1, и мы используем slice() для тиражирования нужных строк.

+0

Господин Флик, большое вам спасибо. Это отлично работало даже для моего большого набора данных. Большое спасибо за быстрый ответ! – Melderon