Мне нужно применить функцию normalmixEM () из библиотеки mixtools к сгруппированным данным. Однако normalmixEM () возвращает объект, который не нравится summarise_all.
В идеале я хотел бы вернуть список, который затем можно разбить на следующем шаге. В противном случае разбейте каждое нужное мне возвращаемое значение на свои собственные столбцы.
stattest - это фрейм данных с тремя столбцами, который выглядит примерно так:
Sample, year, x
1 , 2017, 43
1 , 2017, 23
1 , 2017, 19
1 , 2018, 26
1 , 2018, 16
2 , 2017, 63
2 , 2017, 25
2 , 2018, 22
Вот что я пытаюсь:
BiModality <- stattest %>%
group_by(Sample,year) %>%
summarise_all(funs(
try(normalmixEM(x, eps=1e-03, arbmean=TRUE,mu=c(mean(x)*0.7,mean(x)*1.3)), silent=TRUE) )
)
Что приводит к ошибке
Столбец x
должен иметь длину 1 (итоговое значение), а не 9
Итак, я попытался вернуть одно значение:
BiModality <- stattest %>%
group_by(Sample,year) %>%
summarise_all(funs(
try(normalmixEM(x, eps=1e-03, arbmean=TRUE,mu=c(mean(x)*0.7,mean(x)*1.3))$lambda[1], silent=TRUE) )
)
, который приближает меня, но в конечном итоге не говорит:
Ошибка: столбец x
не может преобразовать группу 13 в числовой
Идеальный сценарий - я получаю новый фрейм данных:
Sample, Year, MxMdl
1 , 2017, [object that I can access subvariables of]
1, 2018, [object]
...
но, если необходимо, вывод формы:
Sample, Year, Lambda1, Lamba2, Mu1, Mu2, Sigma1, Sigma2
1, 2017, 0.6, 0.4, 3.2, 4.1, 0.76, 0.63
...
тоже было бы неплохо.