首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >遍历DataTable,为每个ID构建一个模型

遍历DataTable,为每个ID构建一个模型
EN

Stack Overflow用户
提问于 2019-03-30 23:27:49
回答 2查看 48关注 0票数 1

我有一个数据表,看起来像这样:

代码语言:javascript
运行
复制
ID   Weeks  V1   V2   Sales
1      1    100  200    30
1      2    100  210    40
1      3    102  240    50
2      1    120  220    35
3      1    110  202    51
...

我的目标是预测每个ID在第9周的销售额。大多数ID都是从第1周到第8周的值,其他的只有一个值。这基本上就是我想要的每个ID,而不仅仅是ID 26:

代码语言:javascript
运行
复制
train_ID26 = train[ID==26,]
test_ID26 = test[ID==26,]
model_ID26 = glm(Sales~ V1+V2,data = train_ID26)
test_ID26[,pred:= predict(model_ID26, newdata=test_ID26, type="response")]

我认为这可以通过一个for循环来完成,但不幸的是,我不熟悉R中的那些循环,也不知道如何构建一个。我还读到,循环通常不是R中的首选。

EN

回答 2

Stack Overflow用户

发布于 2019-03-31 00:56:13

考虑在训练和测试数据集上使用split,然后使用Map (包装器到mapply)调用您的预测进行元素级迭代。下面假设两个数据表中具有相同数量的唯一ID。

代码语言:javascript
运行
复制
# LIST OF DATA TABLES
train_list = data.table::split(train, by="ID")
test_list = data.table::split(test, by="ID")

# GENERALIZED PREDICTION FUNCTION
proc_model <- function(test_ID, train_ID) {
   model_ID <- glm(Sales~ V1+V2, data=train_ID)
   test_ID[,pred:= predict(model_ID, newdata=test_ID, type="response")]
}

# LIST OF PREDICTED DATA TABLES
pred_list <- Map(proc_model, train_list, test_list)
票数 2
EN

Stack Overflow用户

发布于 2019-03-30 23:41:22

如果您不怕for loop解决方案:

代码语言:javascript
运行
复制
train_ID<- list()
test_ID <- list()
model_Id <- list()
for(id in train$ID){
  train_ID[[paste0("ID",id)]]=train[ID==id,]
  test_ID[[paste0("ID",id)]]=test[ID==id,]
  model_ID[[paste0("ID",id)]] = glm(Sales~ V1+V2,data = train_ID[[paste0("ID",id)]])
  test_ID[[paste0("ID",id)]]=test_id[[paste0("ID",id)]][,pred:= predict(model_ID[[paste0("ID",id)]], newdata= test_ID[[paste0("ID",id)]], type="response")]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55432943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档