微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据框列表中的 group_by()

如何解决数据框列表中的 group_by()

我想:

  1. 将列表输出与数据框df
  2. 合并
  3. 估计一个 lm() 模型
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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?