首页 > 解决方案 > 在 tibble 的不同级别应用函数

问题描述

我有以下小标题:

library(tidyverse)

set.seed(1234)

df <- tibble(
  x1 = letters[1:2],
  y1 = list(
    tibble(
      x2 = letters[3:4],
      y2 = list(
        tibble(
          x3 = seq(1, 100, 1),
          y3 = rnorm(100)
        )
        )
      )
    )
)

而且我需要访问包含的 tibble 内的 tibble,x3并将y3自定义函数应用于每个数据帧。为简单起见,假设我需要base::mean()申请y3.

我的真实数据比这大得多,所以我正在寻找一种干净有效的方法。有任何想法吗?

标签: rtidyversepurrrtibble

解决方案


你能把你的方式松散下来吗?

 df %>% unnest() %>% unnest() %>% 
   group_by(x2) %>% 
   summarise(mean(y3))

# A tibble: 2 x 2
  x2    `mean(y3)`
  <chr>      <dbl>
1 c         -0.157
2 d         -0.157

不确定您希望最终数据框的外观如何,但这是另一个建议

 df %>% unnest() %>% 
   mutate(y3.average = map(y2, ~mean(.$y3)) ) %>% 
   unnest(y3.average)

# A tibble: 4 x 4
  x1    x2    y2                 y3.average
  <chr> <chr> <list>                  <dbl>
1 a     c     <tibble [100 × 2]>     -0.157
2 a     d     <tibble [100 × 2]>     -0.157
3 b     c     <tibble [100 × 2]>     -0.157
4 b     d     <tibble [100 × 2]>     -0.157

推荐阅读