首页 > 解决方案 > 如何在for循环中选择一列

问题描述

我有一个包含 310 个不同列的大数据框,在这里我创建了一个类似的小例子。我会选择使用 for 循环“sp ...”列。

`ex <-data.frame(ID=c(1,2,3,4,5,6,7,8,9,10),
            COD=c(1,8,4,5,6,8,7,2,8, 10),
            SP=c(10, 20, 40,50,60, 70,70,100,50, 40),
            sp010_hd=c(100,200,350,500,500,250,240, 680, 700, 300),
            sp300_he=c(100,500,650,500,500,250,260, 480, 700, 300),
            sp330_hg=c(100,500,650,500,500,250,260, 480, 700, 300),
            sp330_cc=c(100,500,650,500,500,250,260, 480, 700, 300),
            hd_bio_4=c(208.92,248.10,151.95, 130.01,90.01, 
            140.01,150.09,400.25, 300.00,100.50),
            hd_bio_6=c(207.92,208.10,161.95, 170.01,190.01, 
            120.01,155.09,200.25, 100.00,100.50),
            hd_bio_7=c(227.92,218.10,161.95, 170.01,150.01, 
            150.71,160.09,220.25, 120.00,108.50),
            he_bio_4=c(208.92,248.10,151.95, 140.01,60.01, 
            160.01,157.09,420.25, 300.00,100.50),
            he_bio_6=c(257.92,238.10,131.95, 130.01,160.01, 
            125.01,155.09,220.25, 100.00,100.50),
            he_bio_7=c(227.92,218.10,161.95, 130.01,150.01, 
            100.71,165.09,220.25, 120.00,108.50)))`

`

对于每一列,我想应用 lm() 函数。我尝试了一些尝试,但没有成功。谁能帮我?谢谢

标签: rfor-loopdynamic-columns

解决方案


您可以使用purrr::map

library(tidyverse)

ivs <- colnames(ex %>% select(-ID, -COD, -SP)) 
names(ivs) <- ivs

ivs %>% purrr::map_dfr(~lm(ex$SP ~ ex[,.x]) %>% broom::tidy(), .id = "iv")

term注意:如果我们将列设置为实际报告使用的变量,则输出更具可读性。为此,请data在调用中使用参数lm()

ivs %>% map_dfr(~lm(SP ~ ., data = ex[,c(.x, "SP")]) %>% broom::tidy(), .id = "iv")

输出:

# A tibble: 20 x 6
   iv       term        estimate std.error statistic p.value
   <chr>    <chr>          <dbl>     <dbl>     <dbl>   <dbl>
 1 sp010_hd (Intercept)  22.0      15.5        1.42   0.192 
 2 sp010_hd sp010_hd      0.0758    0.0362     2.10   0.0694
 3 sp300_he (Intercept)  42.6      22.1        1.93   0.0896
 4 sp300_he sp300_he      0.0199    0.0479     0.415  0.689 
 5 sp330_hg (Intercept)  42.6      22.1        1.93   0.0896
 6 sp330_hg sp330_hg      0.0199    0.0479     0.415  0.689 
 7 sp330_cc (Intercept)  42.6      22.1        1.93   0.0896
 8 sp330_cc sp330_cc      0.0199    0.0479     0.415  0.689 
 9 hd_bio_4 (Intercept)  36.7      19.1        1.92   0.0913
10 hd_bio_4 hd_bio_4      0.0742    0.0897     0.828  0.432 
11 hd_bio_6 (Intercept)  65.0      35.9        1.81   0.108 
12 hd_bio_6 hd_bio_6     -0.0866    0.216     -0.401  0.699 
13 hd_bio_7 (Intercept)  65.5      38.2        1.72   0.124 
14 hd_bio_7 hd_bio_7     -0.0860    0.220     -0.390  0.707 
15 he_bio_4 (Intercept)  36.0      18.2        1.98   0.0833
16 he_bio_4 he_bio_4      0.0772    0.0831     0.929  0.380 
17 he_bio_6 (Intercept)  68.6      26.7        2.57   0.0332
18 he_bio_6 he_bio_6     -0.109     0.156     -0.695  0.507 
19 he_bio_7 (Intercept)  67.8      31.6        2.15   0.0640
20 he_bio_7 he_bio_7     -0.105     0.190     -0.553  0.596 

推荐阅读