【问题标题】:Appending results of dlply function to original table将 dlply 函数的结果附加到原始表
【发布时间】:2013-08-07 18:46:32
【问题描述】:

这个问题建立在 Simon 和 James 提供的答案 here

dlply 函数运行良好,可以在我的数据子集中给出 Y 估计值。现在,我的挑战是将这些 Y 估计值和残差返回到原始数据框中,以计算拟合优度统计数据并进行进一步分析。

我能够使用 cbinddlply 输出列表转换为行向量,但这并不完全有效,因为结果是(抱歉降价不佳)。

model <- function(df){ glm(Y~D+O+A+log(M), family=poisson(link="log"), data=df)}
Modrpt <- ddply(msadata, "Dmsa", function(x)coef(model(x)))
Modest <- cbind(dlply(msadata, "Dmsa", function(x) fitted.values(model(x))))

Subset name | Y_Estimates
-------------------------
Dmsa 1      | c(4353.234, 234.34,...
Dmsa 2      | c(998.234, 2543.55,...

这并不能真正回复邮件,因为我需要将单个 Y 估计值(在 Modest 数据框的 Y_estimates 列中用逗号分隔)放入我的 msadata 数据框。

理想情况下,我知道这是不正确的,但我会在这里举个例子,我想做这样的事情:

msadata$Y_est <- cbind(dlply(msadata, "Dmsa", function(x)fitted.values(model(x))))

如果我可以将列表分解为单独的 Y 估计值,我可以通过"Dmsa" 将其加入我的msadata 数据框。我觉得这与 Michael 的回答 here 非常相似,但是在采用 Michael 的 join()merge() 的建议之前,需要将列表元素分开。有什么想法吗?

【问题讨论】:

    标签: r plyr subset


    【解决方案1】:

    在上一个问题中,我提出了data.table 的解决方案。我认为这更适合您想要做的事情,因为您想按组应用模型,然后将结果与原始数据聚合。

    library(data.table)
    DT <- as.data.table(df)
    models <- DT[,{
                    mod= glm(Y~D+O+A+log(M), family=poisson(link="log"))
                    data.frame(res= mod$residuals,
                               fit=mod$fitted.values,
                               mod$model)
                   },                          
                    by = Dmsa]
    

    这是一个包含一些数据的应用程序:

    ## create some data
    set.seed(1)
    d.AD <- data.frame(
    counts = sample(c(10:30),18,rep=TRUE),
    outcome = gl(3,1,18),
    treatment = gl(3,6),
    type = sample(c(1,2),18,rep=TRUE) ) ## type is the grouping variable
    ## corece data to a data.table        
    library(data.table)
    DT <- as.data.table(d.AD)
    ## apply models
    DT[,{mod= glm(formula = counts ~ outcome + treatment, 
                                  family = poisson())
                   data.frame(res= mod$residuals,
                              fit=mod$fitted.values,
                   mod$model)},                          
                         by = type]
    
       type           res      fit counts outcome treatment
     1:    1 -3.550408e-01 23.25729     15       1         1
     2:    1  2.469211e-01 23.25729     29       1         1
     3:    1  9.866698e-02 25.48543     28       3         1
     4:    1  5.994295e-01 18.13147     29       1         2
     5:    1  4.633974e-16 23.00000     23       2         2
     6:    1  1.576093e-01 19.86853     23       3         2
     7:    1 -3.933199e-01 18.13147     11       1         2
     8:    1 -3.456991e-01 19.86853     13       3         2
     9:    1  6.141856e-02 22.61125     24       1         3
    10:    1  4.933908e-02 24.77750     26       3         3
    11:    1 -1.154845e-01 22.61125     20       1         3
    12:    2  9.229985e-02 15.56349     17       1         1
    13:    2  5.805515e-03 21.87302     22       2         1
    14:    2 -1.004589e-01 15.56349     14       1         1
    15:    2  2.537653e-16 14.00000     14       1         2
    16:    2 -1.603110e-01 21.43651     18       1         3
    17:    2  1.662347e-01 21.43651     25       1         3
    18:    2 -4.214963e-03 30.12698     30       2         3
    

    【讨论】:

    • 哇,这真是太棒了 AGSTUDY!我永远不会想到这一点,但它工作得很好。结果正是我需要的。赞一个!
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 2019-07-02
    • 2021-01-11
    • 1970-01-01
    • 2019-11-19
    • 2020-07-31
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多