Есть еще несколько вопросов об этом на dplyr Github repo и, по крайней мере, один связанный вопрос SO, но ни один из них не охватывает мой вопрос - я думаю.dplyr :: mutate добавить несколько значений
- Adding multiple columns in a dplyr mutate call более или менее то, что я хочу, но есть специальный случай, ответ на этот случай (
tidyr::separate
), не (я думаю) работает для меня. - This issue («суммировать или мутировать с функциями, возвращающими несколько значений/столбцов») говорит «use
do()
».
Вот мой случай использования: Я хочу, чтобы вычислить точные биномиальных доверительные интервалы
dd <- data.frame(x=c(3,4),n=c(10,11))
get_binCI <- function(x,n) {
rbind(setNames(c(binom.test(x,n)$conf.int),c("lwr","upr")))
}
with(dd[1,],get_binCI(x,n))
## lwr upr
## [1,] 0.06673951 0.6524529
я могу получить это сделать с do()
, но мне интересно, если есть более выразительный способ сделать это (он чувствует, как mutate()
может иметь .n
аргумент as is being discussed for summarise() ...)
library("dplyr")
dd %>% group_by(x,n) %>%
do(cbind(.,get_binCI(.$x,.$n)))
## Source: local data frame [2 x 4]
## Groups: x, n
##
## x n lwr upr
## 1 3 10 0.06673951 0.6524529
## 2 4 11 0.10926344 0.6920953
Вы поселились, чтобы сделать это особенно с 'dplyr'? С помощью 'data.table' вы можете быстро выполнить' setDT (dd) [, as.list (get_binCI (x, n)), by =. (X, n)] 'Хотя мои умственные навыки чтения не позволяют мне определите, что именно вы подразумеваете под выражением «* выразительный путь» ... –
Это, безусловно, хорошо. Я * * надеялся на ответ 'dplyr' (хотя я не удивлюсь, если мое решение выше - лучшее, что может сделать ATM). У меня нет ничего против 'data.table', но я предпочитаю' dplyr', и, в основном, я все еще трачу много сил, обнимая его, не хочу добавлять совершенно новый набор синтаксис (и не навязывать его моим ученикам и коллегам) на данный момент. Но если вы ответите так, я продолжу, это полезно. –
Привет всем, надеясь нанести удар; есть ли теперь лучший способ сделать это с помощью гнездования? Я пытаюсь, но еще не получил его. – Aaron