使用Data.Table包按组拟合模型 [英] Fit model by group using Data.Table package

查看:58
本文介绍了使用Data.Table包按组拟合模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用data.table语法按组拟合多个模型?我希望我的输出是一个data.frame,其中每个按组"都有列,而每个模型拟合都有一列.目前,我可以使用dplyr软件包来执行此操作,但不能在data.table中执行此操作.

How can I fit multiple models by group using data.table syntax? I want my output to be a data.frame with columns for each "by group" and one column for each model fit. Currently I am able to do this using the dplyr package, but can't do this in data.table.

# example data frame
df <- data.table(
   id = sample(c("id01", "id02", "id03"), N, TRUE),     
   v1 = sample(5, N, TRUE),                          
   v2 = sample(round(runif(100, max = 100), 4), N, TRUE) 
)

# equivalent code in dplyr
group_by(df, id) %>%
do( model1= lm(v1 ~v2, .),
    model2= lm(v2 ~v1, .)
  )

# attempt in data.table
df[, .(model1 = lm(v1~v2, .SD), model2 = lm(v2~v1, .SD) ), by = id ]

# Brodie G's solution
df[, .(model1 = list(lm(v1~v2, .SD)), model2 = list(lm(v2~v1, .SD))), by = id ]

推荐答案

尝试:

df[, .(model1 = list(lm(v1~v2, .SD)), model2 = list(lm(v2~v1, .SD))), by = id ]

或更惯用的:

formulas <- list(v1~v2, v2~v1)
df[, lapply(formulas, function(x) list(lm(x, data=.SD))), by=id]

这篇关于使用Data.Table包按组拟合模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆