我想对每个组使用相同的回归模型,并使用系数(不同组之间不同)在同一数据集中添加预测值。我可以使用循环来实现,但是如何使用lapply
来实现呢
data <- data.frame(x = rnorm(100), y = rnorm(100), id = rep(c('a', 'b', 'c', 'd'), 25))
for (i in unique(data$id)){
model <- lm(y ~ x, data = subset(data, id == i))
data$pred[data$id == i] <- predict(model, subset(data, id == i))
}
发布于 2021-07-17 14:21:55
您可以使用lapply
作为-
data <- data[order(data$id), ]
data$pred <- unlist(lapply(split(data, data$id), function(df) {
model <- lm(y ~ x, data = df)
predict(model, df)
}))
也可以使用by
-
data$pred <- unlist(by(data, data$id, function(df) {
model <- lm(y ~ x, data = df)
predict(model, df)
}))
发布于 2021-07-17 14:27:12
lapply
不是必需的。下面的按组回归的解决方案似乎更简单。
library(data.table)
setDT(data)[,pred2:=predict(lm(y ~ x, data = .SD)),by=id]
发布于 2021-07-17 14:41:47
你也可以在基数R中使用这个:
do.call(rbind, lapply(unique(data$id), function(a) {
tmp <- subset(data, id == a)
model <- lm(y ~ x, data = tmp)
tmp$pred <- predict(model)
tmp
}))
https://stackoverflow.com/questions/68421248
复制