如何解决数据框列表中的 group_by()
我想:
id <- c(1,2,3,4,5,1,5)
quarter <- c("1","2","1","3","3")
month <- c(3,7,8,9)
pred_dif <- c(0.5,0.1,0.15,0.23,0.75,0.6,0.49,0.81,0.37,0.14)
list_1 <- data.frame(id,pred_dif,month)
pred_dif <- c(0.45,0.18,0.35,0.63,0.25,0.29,0.11,0.17,0.24)
list_2 <- data.frame(id,month)
pred_dif <- c(0.58,0.13,0.55,0.76,0.3,0.27,0.04)
list_3 <- data.frame(id,month)
pred_dif <- c(0.3,0.61,0.85,0.56,0.91,0.48,0.91)
list_4 <- data.frame(id,month)
out <- list(list_1,list_2,list_3,list_4)
pred_second <- c(0.4,0.71,0.28,0.39,0.95,0.86,0.66,0.58,0.81)
df <- data.frame(id,quarter,pred_second,month)
library(purrr)
library(dplyr)
library(broom)
library(tidyr)
lmout_lst <- map(out,~ left_join(.x,df,by = c('id','month')) %>%
group_by(quarter) %>%
summarise(new = list(lm(pred_dif ~ as.factor(month) - 1) %>%
broom::tidy(.))) %>%
unnest(new))
问题发生在ols_list_reg。尤其是“group_by”命令。
知道为什么会发生这种情况以及可能的解决方案吗?
解决方法
正如@RonakShah 所说,您的代码对于列表中的单个元素失败。根本不清楚您要实现的目标,但是
out %>%
bind_rows(.id="element") %>%
left_join(df,by=c("id","period")) %>%
mutate(period=as.factor(period)) %>%
group_by(element) %>%
group_map(function(.x,.y) lm(pred_dif ~ period-1,data=.x))
至少在没有警告或错误的情况下运行并给出可能合理的输出:
[[1]]
Call:
lm(formula = pred_dif ~ period - 1,data = .x)
Coefficients:
period01 period02 period08 period09 period11 period12
0.365 0.600 0.620 0.100 0.370 0.412
[[2]]
Call:
lm(formula = pred_dif ~ period - 1,data = .x)
Coefficients:
period01 period02 period08 period09 period11 period12
0.540 0.630 0.270 0.180 0.170 0.232
[[3]]
Call:
lm(formula = pred_dif ~ period - 1,data = .x)
Coefficients:
period01 period02 period08 period09 period11 period12
0.355 0.300 0.525 0.130 0.270 0.552
[[4]]
Call:
lm(formula = pred_dif ~ period - 1,data = .x)
Coefficients:
period01 period02 period08 period09 period11 period12
0.295 0.760 0.705 0.610 0.480 0.618
,
也许,你可以试试这个 -
library(tidyverse)
map(out,~ left_join(.x,df,by = c('id','month')) %>%
group_by(quarter) %>%
summarise(new = list({
tryCatch(lm(pred_dif ~ as.factor(month) - 1) %>% broom::tidy(.),error = function(e) tibble(estimate = NA))
})) %>%
unnest(new)
)
如果您想将所有结果组合在一起,请使用 map_df
而不是 map
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。