Summarize_at over groups给出了可变长度错误

时间:2018-03-08 13:24:33

标签: r dplyr

我正在尝试应用一个函数,总结曝光变量(exp)与几个结果变量(out1out2等)之间的线性关系。考虑以下玩具数据,以及辅助函数,以在两个变量之间拟合模型并返回所需的输出:

library(dplyr)    

df <- tibble(group = sample(c("a", "b"), size = 100, replace = T),
             exp = rnorm(100),
             out1 = rnorm(100, 4, 1),
             out2 = rnorm(100, 3, 1))

linear_beta <- function(y, x) {
  tidy(lm(y ~ x)) %>%
    filter(term == "x") %>%
    mutate(return = paste0("Beta = ", round(estimate, 2))) %>%
    pull(return)
}

如果我使用辅助函数来总结暴露与两个组的单一结果之间的关系,那么

df %>%
  group_by(group) %>%
  summarize(out1 = linear_beta(out1, exp))
# # A tibble: 2 x 2
# group out1       
# <chr> <chr>      
#  a     Beta = 0.01
#  b     Beta = 0.11

但是,当我尝试使用summarize_at并找到out1out2的关系时,我收到错误

df %>%
  group_by(group) %>%
  summarize_at(c("out1", "out2"), linear_beta, .$exp)
  

summarise_impl(.data,dots)出错:评估错误:变量   长度不同(找到'x')。

我可以说,结果和.$exp的长度应该相同,但显然我遗漏了一些东西。任何帮助将不胜感激!

更新

似乎第二个参数.$exp没有应用分组 - 正如这可以证明的那样。

df %>%
  # group_by(group) %>%
  summarize_at(c("out1", "out2"), linear_beta, .$exp)
# # A tibble: 1 x 2
# out1        out2       
# <chr>       <chr>      
# Beta = 0.08 Beta = 0.06

我不清楚如何将分组应用于.$exp,或者甚至可能......

1 个答案:

答案 0 :(得分:1)

我们可以尝试

df %>% 
  nest(-group) %>%
  mutate(Col = map(data, ~ .x %>% 
                           summarise_at(c('out1', 'out2'), linear_beta, .$exp))) %>%
  select(group, Col) %>%
  unnest

# A tibble: 2 x 3
#    group out1         out2       
#    <chr> <chr>        <chr>      
#1 a     Beta = -0.22 Beta = 0.27
#2 b     Beta = 0.1   Beta = 0.06