考虑这个例子:
library(dplyr)
library(magrittr)
set.seed(123)
grp_s <- round(runif(4, 1, 10))
group <- rep(1:length(grp_s), grp_s)
dataF <- data.frame(grouping = group, var_a = runif(length(group)), var_b = runif(length(group)), var_c = runif(length(group)))
compute_it <- function(var_a, var_b){
sum(var_a[var_b > .5], na.rm = TRUE)
}
dataF %<>%
group_by(grouping) %>%
mutate(fix_it = compute_it(var_a, var_b))
到目前为止一切顺利。现在而不是compute_it
作为参数
列名,我想使用一个以参数为参数的函数
一大块数据(每个grouping
值的一个块)。
使用此功能的列表:
compute_it_2 <- function(Data){
sum(Data$var_a[Data$var_b > .5], na.rm = TRUE)
}
上面使用了compute_it
。怎么做?
答案 0 :(得分:1)
同样使用view source
和tidyr
,我们可以先使用purrr
或do
:
nest
,并提供:
library(tidyverse) dataF %>% group_by(grouping) %>% do(fix_it = compute_it_2(.)) %>% unnest()
或嵌套方法:
# A tibble: 4 × 2
grouping fix_it
<int> <dbl>
1 1 2.4065483
2 2 0.9568333
3 3 0.0000000
4 4 1.8274955
dataF %>% group_by(grouping) %>% nest() %>% mutate(fix_it = map_dbl(data, compute_it_2))
如果您# A tibble: 4 × 3
grouping data fix_it
<int> <list> <dbl>
1 1 <tibble [4 × 3]> 2.4065483
2 2 <tibble [8 × 3]> 0.9568333
3 3 <tibble [5 × 3]> 0.0000000
4 4 <tibble [9 × 3]> 1.8274955
第二个选项,则会返回原始帧:
unnest()