gpt4 book ai didi

r - purrr::map_dfr 按列绑定(bind),而不是按预期的行绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 09:04:09 26 4
gpt4 key购买 nike

我是 tidyverse 的新手,因此仍在努力让它做我知道如何用 base 做的事情。

问题:我想遍历数据框的列,将每一列分别输入到 lm 调用中,然后将输出作为整洁的数据框。我不关心截距,所以我想保存到整洁输出中的是自变量的系数。我希望最终输出如下所示:一个数据框,其中列是系数,行是原始数据框中的每个变量。我可以用 base 使用 do.call("rbind", ...) 来做,但是当我迁移到 tidyverse 时,我想看看是否有办法在 tidyverse 上做。 purrr::map_dfr 在这种情况下不起作用; a known issue .

一些可重现的代码:

> library(tidyverse)
>
> set.seed(62442)
>
> iv <- rnorm(100)
> dvs <- as_tibble(replicate(5, iv + rnorm(100)), .name_repair = "universal")
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
>
> # This doesn't work
> dvs %>% map_dfr(~ summary(lm(.x ~ iv))$coefficients[2, ])
# A tibble: 4 x 5
...1 ...2 ...3 ...4 ...5
<dbl> <dbl> <dbl> <dbl> <dbl>
1 8.78e- 1 1.09e+ 0 9.11e- 1 1.19e+ 0 8.80e- 1
2 1.05e- 1 1.17e- 1 9.86e- 2 9.33e- 2 1.16e- 1
3 8.34e+ 0 9.29e+ 0 9.24e+ 0 1.27e+ 1 7.60e+ 0
4 4.78e-13 4.16e-15 5.40e-15 1.97e-22 1.80e-11
>
> # It behaves exactly like:
> dvs %>% map_dfc(~ summary(lm(.x ~ iv))$coefficients[2, ])
# A tibble: 4 x 5
...1 ...2 ...3 ...4 ...5
<dbl> <dbl> <dbl> <dbl> <dbl>
1 8.78e- 1 1.09e+ 0 9.11e- 1 1.19e+ 0 8.80e- 1
2 1.05e- 1 1.17e- 1 9.86e- 2 9.33e- 2 1.16e- 1
3 8.34e+ 0 9.29e+ 0 9.24e+ 0 1.27e+ 1 7.60e+ 0
4 4.78e-13 4.16e-15 5.40e-15 1.97e-22 1.80e-11
>
> # All is left for me to do is:
> res <- dvs %>% map(~ summary(lm(.x ~ iv))$coefficients[2, ])
> do.call("rbind", res)
Estimate Std. Error t value Pr(>|t|)
...1 0.8776895 0.10525549 8.338658 0.0000000000004779501411861117
...2 1.0911362 0.11742588 9.292127 0.0000000000000041631074216992
...3 0.9113473 0.09863111 9.239958 0.0000000000000054021858298938
...4 1.1852848 0.09330950 12.702724 0.0000000000000000000001970469
...5 0.8799633 0.11579113 7.599575 0.0000000000179548788283525966

最佳答案

map 行绑定(bind)在数据集为 data.frame/tibblelist 时起作用。在这里,它是一个命名向量。一种选择是使用 as.list

将其转换为 list
library(dplyr)
library(purrr)
dvs %>%
map_dfr(~ summary(lm(.x ~ iv))$coefficients[2, ] %>% as.list)
# A tibble: 5 x 4
# Estimate `Std. Error` `t value` `Pr(>|t|)`
#* <dbl> <dbl> <dbl> <dbl>
#1 0.878 0.105 8.34 4.78e-13
#2 1.09 0.117 9.29 4.16e-15
#3 0.911 0.0986 9.24 5.40e-15
#4 1.19 0.0933 12.7 1.97e-22
#5 0.880 0.116 7.60 1.80e-11

关于r - purrr::map_dfr 按列绑定(bind),而不是按预期的行绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60403043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com