Chciałbym użyć mutacji do obliczenia kolumny przy użyciu rozkładu dwumianowego.dplyr mutate za pomocą rbinom nie zwracaj losowych liczb
Mam następujący przykład:
library("dplyr")
d = data.frame(ref = rbinom(100,100,0.5))
d$coverage = 100
d$prob = 0.5
d$eprob= d$ref/d$coverage
d = tbl_df(d)
mutate(d,
ref1= ref,
cov1 = coverage,
eprob1 = eprob,
ref2=rbinom(1, coverage, eprob),
ref3=rbinom(1, cov1, eprob1)
)
Wynik jest tak:
Source: local data frame [100 x 9]
ref coverage prob eprob ref1 cov1 eprob1 ref2 ref3
1 52 100 0.5 0.52 52 100 0.52 45 44
2 50 100 0.5 0.50 50 100 0.50 45 44
3 45 100 0.5 0.45 45 100 0.45 45 44
4 45 100 0.5 0.45 45 100 0.45 45 44
5 47 100 0.5 0.47 47 100 0.47 45 44
6 46 100 0.5 0.46 46 100 0.46 45 44
7 50 100 0.5 0.50 50 100 0.50 45 44
8 53 100 0.5 0.53 53 100 0.53 45 44
9 44 100 0.5 0.44 44 100 0.44 45 44
10 56 100 0.5 0.56 56 100 0.56 45 44
ja nie rozumiem - Chcę funkcję mutate zwraca losową liczbę wyciągnąć z dwumianowy dystrybucja podana przez ref i pokrycia ("ref2") ...
Mutuj poprawnie odczytać kolumny - ale coś dziwnego dzieje się podczas wywoływania rbinom ...
Każda pomoc, którą doceniam.
Jeszcze bardziej ogólnym rozwiązaniem jest 'rbinom (n(), coverage, eprob)', ponieważ 'n()' znajduje rozmiar wszystkich mutacji danych. (To też będzie działać z zgrupowanymi tabelami) –
@DavidRobinson - Tak, to jest lepsze. Zmienię moją odpowiedź, aby to odzwierciedlić. Dzięki. – Alex
Ale czy po prostu nie użyje tej samej wartości epoki dla wszystkich 100 losowań? (To nie jest to, czego chcę - i nie chcę narysować 1 liczby ze 100 różnych rozkładów dwumianowych, ponieważ eprob przyjmuje 100 różnych wartości). – pallevillesen