r - 在 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
.
我的真实数据比这大得多,所以我正在寻找一种干净有效的方法。有任何想法吗?
解决方案
你能把你的方式松散下来吗?
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
推荐阅读
- python - Django 找不到页面 [已回答]
- java - 线程“主”java.lang.NoClassDefFoundError 中的异常:解决方案(错误名称:解决方案)
- c# - 单击按钮时隐藏asp.net中的文本框
- sql - 如何编写一个 SQL WHERE 语句,其中包含应存在于一组列中的多个条目
- python - 如何使用 OneVsRestClassifier 和 NearestCentroid 分类器将多标签分类转换为二进制分类
- algorithm - 自适应梯形规则及优先队列实现的说明
- javascript - React Native 背景图片只是一个白屏
- javascript - 点击浏览器重新加载按钮后如何渲染反应组件
- javascript - Angular 9 ng-content 动态更新
- ios - Metro-bundler 错误:Haste 模块映射中不存在模块`@babel/runtime/helpers/interopRequireDefault`