dplyr:变异中的custum函数。使用完整矩阵而不是块?

时间:2017-05-14 12:27:43

标签: r dplyr magrittr

考虑这个例子:

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。怎么做?

1 个答案:

答案 0 :(得分:1)

同样使用view sourcetidyr,我们可以先使用purrrdo

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()