使用purrr+;地图

使用purrr+;地图,r,dictionary,purrr,R,Dictionary,Purrr,我有一个数据帧,在该数据帧上使用整个数据集运行多个GLM df <- data.frame(Var1 = sample(as.factor(0:1), replace = TRUE, 1000), Var2 = runif(100), Var3 = runif(100), Var4 = runif(100), Var5 = sample

我有一个数据帧,在该数据帧上使用整个数据集运行多个GLM

  df <- data.frame(Var1 = sample(as.factor(0:1), replace = TRUE, 1000),
                   Var2 = runif(100),
                   Var3 = runif(100),
                   Var4 = runif(100),
                   Var5 = sample(as.factor(0:1), replace = TRUE, 1000),
                   Var6 = sample(as.factor(0:1), replace = TRUE, 1000))
现在我想使用Var5和Var6来过滤我的数据集

我想为4个可能的数据集Var52*Var62中的每一个设置一个GLM

使用cross()我可以得到Var 5和Var 6的所有值的组合

list <-  df %>% 
  expand(Var5,Var6) %>%
  cross()

我很感激你能为我提供任何关于实现这一点的建议。

下面是一种使用{dplyr}的
rowwise
符号(而不是
purrr::map
)的方法

库(tidyverse)
df%
枢轴长度(cols=c(“Var3”、“Var4”))%>%
嵌套单位(名称)%>%
交叉(Var5=c(0,1),Var6=c(0,1))%>%
行()
mutate(data=list(过滤器(data,Var5==.env$Var5&Var6=.env$Var6)),
模型=列表(glm(Var1值,数据=数据,族=二项式(“logit”)))%>%
突变(整洁=列表(扫帚::整洁(模型))%>%
不干净(整洁)
#>#tibble:16 x 10
#>名称数据Var5 Var6模型术语估计标准误差统计p值
#>                              

#>1 Var3 2 Var3 3 Var3 4 Var3 5 Var3 6 Var3 7 Var3 8 Var3 9 Var4 10 Var4 11 Var4 12 Var4 13 Var4 14 Var4 15 Var4 16 Var4是代码的
变异部分,即
df%>%mutate.
。关于
过滤器
,您可以使用
拆分(df,list(df['Var4','Var5'),drop=TRUE)
或使用
组拆分
,即
df%>%组拆分(Var5,Var5)
进入
列表
非常感谢您关注这个问题。我忘记发布一些代码来进一步澄清我的问题。我已经用额外的信息对其进行了更新。如果我正确阅读了您的解决方案,您会在一个嵌套中拥有一个嵌套,该嵌套将Var5和Var6分组,以便获得我的4个组合?
list <-  df %>% 
  expand(Var5,Var6) %>%
  cross()
  df %>%
  filter(Var5 == 1 & Var6 == 1) %>%
  pivot_longer(cols = c("Var3","Var4")) %>%
  group_by(name)  %>%  nest() %>%
  mutate(model = map(data,~glm(Var1 ~ value, data = .x, family=binomial("logit"))))  %>%
  mutate(tidy= map(model, tidy)) %>%
  unnest(tidy)

  df %>%
  filter(Var5 == 1 & Var6 == 0) %>%
  pivot_longer(cols = c("Var3","Var4")) %>%
  group_by(name)  %>%  nest() %>%
  mutate(model = map(data,~glm(Var1 ~ value, data = .x, family=binomial("logit"))))  %>%
  mutate(tidy= map(model, tidy)) %>%
  unnest(tidy)

ect...