使用purrr+;地图
我有一个数据帧,在该数据帧上使用整个数据集运行多个GLM使用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
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...