如何解决应用 lm 和 summarise/across 时丢失的列名
我想使用 summarise
/across
和 lm
来拟合使用小标题中不同列的回归。像这样:
library(tidyverse)
library(broom)
fits <- tibble(mtcars) %>%
summarise(across(c(vs,am),~list(tidy(lm(wt ~ .x + mpg)))))
但是作为 lm
传入 '.x'
的列最终在回归输出中标记为 .x
。
fits %>% unnest(vs)
# A tibble: 3 x 6
term estimate std.error statistic p.value am
<chr> <dbl> <dbl> <dbl> <dbl> <list>
1 (Intercept) 6.10 0.353 17.3 8.36e-17 <tibble [3 × 5]>
2 .x 0.0738 0.239 0.308 7.60e- 1 <tibble [3 × 5]>
3 mpg -0.145 0.0200 -7.24 5.63e- 8 <tibble [3 × 5]>
如果我即时构建 lm
公式并使用 cur_column()
,我可以保留名称,但这感觉很笨拙:
tibble(mtcars) %>%
summarise(across(c(vs,~list(tidy(lm(formula(paste0("wt ~ ",cur_column()," + mpg"))))))) %>%
unnest(vs)
# A tibble: 3 x 6
term estimate std.error statistic p.value am
<chr> <dbl> <dbl> <dbl> <dbl> <list>
1 (Intercept) 6.10 0.353 17.3 8.36e-17 <tibble [3 × 5]>
2 vs 0.0738 0.239 0.308 7.60e- 1 <tibble [3 × 5]>
3 mpg -0.145 0.0200 -7.24 5.63e- 8 <tibble [3 × 5]>
我希望输出正确使用 .x
的真实列名,而不必执行此解决方法,但仍使用 summarise
/across
主题,不合并map
。
这似乎应该是可能的。有什么建议吗?
*从@akrun 的回答中复制我的评论以阐明我在寻找什么:
我真正想知道的是,在汇总/交叉操作中保留的列名是否可以在 lm 中直接引用。类似于 {{.x}} 或 rlang::as_name(.x)。我的意思是,我知道那些不起作用,但似乎除了 cur_column 中的字符串版本之外,名称信息应该保留。
解决方法
可以用 <script type="text/javascript">
let elements = document.getElementById("holder").getElementsByTagName('div');
for(let i=0; i<50; i++){
if (i%2 == 0) {
console.log(elements[i]);
elements[i].style.color = "green";
}
}
</script>
reformulate
-输出
library(dplyr)
library(broom)
library(tidyr)
tibble(mtcars) %>%
summarise(across(c(vs,am),~
list(tidy(lm(reformulate(c(cur_column(),"mpg"),"wt")))))) %>%
unnest(vs)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。