【发布时间】:2021-01-25 22:14:50
【问题描述】:
我有一个数据框,我使用整个数据集在其上运行多个 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))
df %>%
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)
现在我想使用 Var5 和 Var6 来过滤我的数据集。
我想要 4 个可能的数据集 Var52 * Var62
中的每一个的 GLM使用 cross() 我可以得到 Var 5 和 Var 6 的值的所有组合。
list <- df %>%
expand(Var5,Var6) %>%
cross()
现在我想使用列表过滤我的数据框。 所以我想为 4 个可能的数据帧中的每一个运行一个 GLM。
例如在手动模式下。
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...
感谢您就实现这一目标给我的任何建议。
【问题讨论】:
-
是您的
mutate代码的一部分,即df %>% mutate..。关于filter,您可以使用split(df, list(df['Var4', 'Var5'), drop = TRUE)或与group_split即df%>% group_split(Var5, Var5)一起使用list -
非常感谢您关注这个问题。我忘了发布一些代码来进一步澄清我的问题。我已经用额外的信息更新了它。如果我正确阅读了您的解决方案,您将在嵌套 Var5 和 Var6 的嵌套中放置一个嵌套,以便获得我的 4 种组合?
标签: r dictionary purrr