这个问题在dplyr的Github repo上已经有了几个讨论,还有至少一个相关的Stack Overflow问题,但它们都没能完全回答我的问题——我想。
- 在dplyr的mutate中添加多列大致是我想要的,但那里只提供了一个特例的答案(
tidyr::separate
),似乎对我不适用。 - 这个问题(“使用返回多个值/列的函数进行总结或变异”)建议使用“
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()
可能会有一个像summarise()正在讨论的.n
参数...)
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)]
。虽然我的心灵感应能力无法确定你所说的“表达方式”具体是什么意思... - David Arenburgdplyr
的答案(尽管如果我上面的解决方案是目前最好的,我也不会感到惊讶)。我并不反对data.table
,但我更喜欢dplyr
,而且——主要是——我仍然在花费大量的脑力来理解它,目前不想添加一整套新的语法(也不想将其强加给我的学生和同事)。但如果你那样回答我,我会点赞的,这很有用。 - Ben Bolkerunnest
和map2
,你可能会感兴趣。 - markdly