【问题标题】:Fit model by group using Data.Table package使用 Data.Table 包按组拟合模型
【发布时间】:2015-04-02 19:12:33
【问题描述】:

如何使用 data.table 语法按组拟合多个模型?我希望我的输出是一个 data.frame,其中每个“按组”的列和每个模型拟合的列。目前我可以使用 dplyr 包做到这一点,但不能在 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 ]

【问题讨论】:

  • 很好的例子说明了语法等价。别忘了给 BrodieG 打勾。

标签: r data.table


【解决方案1】:

试试:

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]

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多