我在弄清楚如何解决这个问题时遇到了一些困难。我有一个数据框,我分成不同的网站(link5)。一旦拆分,我基本上想要在子集上运行线性回归模型。这是我正在使用的代码,但它绝对不正确。此外,如果我可以将模型结果输出到新的数据框,这样每个站点将有一行具有模型参数估计值,那将是很好的 - 这只是一个愿望,而不是现在的必需品。谢谢你的帮助!
les_events <- split(les, les$link5)
result <- lapply(les_events) {
lm1 <-lm(cpe~K,data=les_events)
coef <- coef(lm1)
q.hat <- -coef(lm1)[2]
les_events$N0.hat <- coef(lm1[1]/q.hat)
}
答案 0 :(得分:3)
你有很多问题。
FUN
参数)传递给lapply
{}
内的位差不多,但不是你想要的功能所在的身体)以下内容将返回模型中的系数
result <- lapply(les_events, function(DD){
lm1 <-lm(cpe~K,data=DD)
coef <- coef(lm1)
data.frame(as.list(coef))
})
这将返回包含每个系数列的data.frames列表。
lapply(les_events, lm, formula = 'cpe~K')
将返回一个线性模型对象列表,这可能更有用。
对于更一般的split / apply / combine
方法,请使用plyr
或data.table
library(data.table)
DT <- data.table(les)
result <- les[, {lm1 <- lm(cpe ~ K, data = .SD)
as.list(lm1)}, by = link5]
library(plyr)
result <- ddply(les, .(link5), function(DD){
lm1 <-lm(cpe~K,data=DD)
coef <- coef(lm1)
data.frame(as.list(coef))
})
# or to return a list of linear model objects
dlply(les, link5, function(DD){ lm(cpe ~K, data =DD)})