(我假设您重复的 F 行在这里是一个单独的变量)
library(tidyr)
library(dplyr)
df <- data.frame(A = c(0, 1), B = c(1, 0), C = c(1, 1), D = c(1, 0), E = c(1, 1), F = c(1, 0), G = c(0, 1), F2 = c(1, 2), H = c(3, 2))
使用tidyr和dplyr,先将数据reshape为长格式
df_long <- df %>%
gather(Variable, Value, B:H) %>%
group_by(Variable)
# A tibble: 16 x 3
# Groups: Variable [8]
A Variable Value
<dbl> <chr> <dbl>
1 0 B 1.00
2 1.00 B 0
3 0 C 1.00
4 1.00 C 1.00
5 0 D 1.00
6 1.00 D 0
7 0 E 1.00
8 1.00 E 1.00
9 0 F 1.00
10 1.00 F 0
11 0 G 0
12 1.00 G 1.00
13 0 F2 1.00
14 1.00 F2 2.00
15 0 H 3.00
16 1.00 H 2.00
然后使用dplyr::do 将您的glm 应用于按变量分组的每组值和响应 (A) (B:H)
lms <- df_long %>% do(lm = glm(A ~ Value, data = ., family = binomial(link = 'logit')))
Source: local data frame [8 x 2]
Groups: <by row>
# A tibble: 8 x 2
Variable lm
* <chr> <list>
1 B <S3: glm>
2 C <S3: glm>
3 D <S3: glm>
4 E <S3: glm>
5 F <S3: glm>
6 F2 <S3: glm>
7 G <S3: glm>
8 H <S3: glm>
如果您希望在每个lm 都可以通过变量名访问的列表中,请尝试
lms_list <- setNames(lms$lm, lms$Variable)
# Now use `lms_list$B`, etc