R 使用lm函数应用循环时出错

R 使用lm函数应用循环时出错,r,na,lm,R,Na,Lm,我试图对一个数据帧应用一个循环,以便提取每个公司进行的所有回归的beta。 以下是数据的简化版本,用作示例: Dev_Panel_1 <- structure(list(companyID = c("A:GMGX", "A:GMGX", "A:GMGX", "A:GMGX", "A:GMGX", "A:GPTX", "A:GPTX&q

我试图对一个数据帧应用一个循环,以便提取每个公司进行的所有回归的beta。 以下是数据的简化版本,用作示例:

Dev_Panel_1 <- structure(list(companyID = c("A:GMGX", "A:GMGX", "A:GMGX", "A:GMGX", "A:GMGX", "A:GPTX", 
             "A:GPTX", "A:GPTX", "A:GPTX", "A:GPTX"), 
             year = c(2005, 2006, 2007, 2008, 2009, 1983, 1984, 1985, 
             1986, 1987), 
             Profitability = c(0.76, 0.1, -0.01, -0.1, 0.04, 
             0.07, 0.06, 0.05, 0.05, 0.11), 
             Otminus1 = c(-0.28, -0.28, 
             -0.44, -0.27, 0.23, 0.11, -0.01, -0.01, 0.02, -0.04)), 
             row.names = c(NA, -10L), class = "data.frame")
我在多个问题中了解到了这个问题,例如:

但到目前为止,提供的解决方案都不起作用。

尝试使用以下方法:

vec <- unique(Dev_Panel_1$companyID)
result <- vector('list', length(vec))

for (i in seq_along(vec)) {
  result[[i]] <- coef(lm(Otminus1~Profitability, Dev_Panel_1, companyID==vec[i]))
}

mat <- do.call(rbind, result)
mat
#     (Intercept) Profitability
#[1,]     -0.1961       -0.0756
#[2,]      0.0568       -0.6290


vec这就像一个符咒!谢谢。你能告诉我我在原始代码中做错了什么吗?在你的
for
循环中,你正在做
1:length(unique(Dev\u Panel\u 1$companyID)
这意味着
I
是1,2,3…在
lm
函数中你做
Dev\u Panel\u 1$companyID==I,]
其中没有值为1、2、3的
公司ID
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, …) : 0 (non-NA)

vec <- unique(Dev_Panel_1$companyID)
result <- vector('list', length(vec))

for (i in seq_along(vec)) {
  result[[i]] <- coef(lm(Otminus1~Profitability, Dev_Panel_1, companyID==vec[i]))
}

mat <- do.call(rbind, result)
mat
#     (Intercept) Profitability
#[1,]     -0.1961       -0.0756
#[2,]      0.0568       -0.6290