我想使用 mutate 将函数应用于嵌套/分组数据集的每一组。这个例子应该有助于解释目标。需要有关如何正确编码的建议。
制作一个分组/嵌套的假数据集。
data(kidney)
grp_kidney <- kidney %>% group_by(sex) %>% nest()
它具有以下结构:
> grp_kidney
# A tibble: 2 x 2
# Groups: sex [2]
sex data
<dbl> <list>
1 1 <tibble [20 × 6]>
2 2 <tibble [56 × 6]>
接下来,我们制作一个函数来拟合这些数据的生存曲线。
sFit <- function(df, ci = 'none'){
survfit(Surv(time, status) ~ age, data = df, conf.type = ci)
}
最后,我们将此函数应用于分组数据的每一行,并使用 purrr::map 和 dplyr::mutate 将结果保存为分组 tibble 中的新列。
grp_kidney <- grp_kidney %>%
mutate(plain = map(grp_kidney$data, sFit, ci = 'plain')) %>%
mutate(loglog = map(grp_kidney$data, sFit, ci = 'log-log'))
Error: Problem with `mutate()` input `plain`.
x Input `plain` can't be recycled to size 1.
ℹ Input `plain` is `map(grp_kidney$data, sFit, ci = "plain")`.
ℹ Input `plain` must be size 1, not 2.
ℹ The error occurred in group 1: sex = 1.
Run `rlang::last_error()` to see where the error occurred.
我希望在这个例子中得到的结果是一个嵌套的 data.frame,它具有以下特征:
- 每个分组变量元素一行(本例中为 2 行)
- Col 1:sex - 在本例中为 1 或 2
- Col 2: data - 每组的data.frame
- Col 3:plain - 带有普通 CI 的 survfit 模型的输出
- Col 4: loglog - 带有 log-log CI 的 survfit 模型的输出
如果我创建两个函数,一个用于“plain”,一个用于“log-log”,我就可以完成这项工作。这似乎是一种浪费,并且宁愿将参数传递给更广泛的函数。感谢任何编码专家的帮助。
布兰特