преобразовать список вывода lm в фрейм данных - PullRequest
0 голосов
/ 15 июня 2019

Мне нужно преобразовать список во фрейм данных.Мой список содержит выходные данные функции lm, выполняемой по дням, и представляет собой большой список, содержащий 521 элемент.

Я попробовал следующий код:

df <- bind_rows(modelsT, .id = "column_label")

, но я получаю эту ошибку:

Error: Argument 1 must be a data frame or a named atomic vector, not a lm

естьспособ устранить ошибку?Или другой вариант, как преобразовать список во фрейм данных?

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Зависит от того, что вам нужно:

model <- lm(mpg ~ disp, data = mtcars)
coef(model)
# (Intercept)        disp 
# 29.59985476 -0.04121512 

library(dplyr)
bind_rows(coef(model), coef(model))
# # A tibble: 2 x 2
#   `(Intercept)`    disp
#           <dbl>   <dbl>
# 1          29.6 -0.0412
# 2          29.6 -0.0412

И как @ jay.sf только что предложил

coef(summary(model))
#                Estimate  Std. Error   t value     Pr(>|t|)
# (Intercept) 29.59985476 1.229719515 24.070411 3.576586e-21
# disp        -0.04121512 0.004711833 -8.747152 9.380327e-10
bind_rows(as.data.frame(coef(summary(model))), as.data.frame(coef(summary(model))))
#      Estimate  Std. Error   t value     Pr(>|t|)
# 1 29.59985476 1.229719515 24.070411 3.576586e-21
# 2 -0.04121512 0.004711833 -8.747152 9.380327e-10
# 3 29.59985476 1.229719515 24.070411 3.576586e-21
# 4 -0.04121512 0.004711833 -8.747152 9.380327e-10

В общем, если вы хотите получить что-то, похожее на data.frame, из структуры, взгляните на ее str лекцию. Это может сбивать с толку, но

str(model)
# List of 12
#  $ coefficients : Named num [1:2] 29.5999 -0.0412
#   ..- attr(*, "names")= chr [1:2] "(Intercept)" "disp"
#  $ residuals    : Named num [1:32] -2.01 -2.01 -2.35 2.43 3.94 ...
#   ..- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
#  $ effects      : Named num [1:32] -113.65 -28.44 -1.79 2.65 3.92 ...
#   ..- attr(*, "names")= chr [1:32] "(Intercept)" "disp" "" "" ...
#  $ rank         : int 2
#  $ fitted.values: Named num [1:32] 23 23 25.1 19 14.8 ...
#   ..- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
#  $ assign       : int [1:2] 0 1
#  $ qr           :List of 5
#   ..$ qr   : num [1:32, 1:2] -5.657 0.177 0.177 0.177 0.177 ...
#   .. ..- attr(*, "dimnames")=List of 2
#   .. .. ..$ : chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
#   .. .. ..$ : chr [1:2] "(Intercept)" "disp"
#   .. ..- attr(*, "assign")= int [1:2] 0 1
#   ..$ qraux: num [1:2] 1.18 1.09
#   ..$ pivot: int [1:2] 1 2
#   ..$ tol  : num 1e-07
#   ..$ rank : int 2
#   ..- attr(*, "class")= chr "qr"
#  $ df.residual  : int 30
#  $ xlevels      : Named list()
#  $ call         : language lm(formula = mpg ~ disp, data = mtcars)
#  $ terms        :Classes 'terms', 'formula'  language mpg ~ disp
#   .. ..- attr(*, "variables")= language list(mpg, disp)
#   .. ..- attr(*, "factors")= int [1:2, 1] 0 1
#   .. .. ..- attr(*, "dimnames")=List of 2
#   .. .. .. ..$ : chr [1:2] "mpg" "disp"
#   .. .. .. ..$ : chr "disp"
#   .. ..- attr(*, "term.labels")= chr "disp"
#   .. ..- attr(*, "order")= int 1
#   .. ..- attr(*, "intercept")= int 1
#   .. ..- attr(*, "response")= int 1
#   .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
#   .. ..- attr(*, "predvars")= language list(mpg, disp)
#   .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
#   .. .. ..- attr(*, "names")= chr [1:2] "mpg" "disp"
#  $ model        :'data.frame':    32 obs. of  2 variables:
#   ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#   ..$ disp: num [1:32] 160 160 108 258 360 ...
#   ..- attr(*, "terms")=Classes 'terms', 'formula'  language mpg ~ disp
#   .. .. ..- attr(*, "variables")= language list(mpg, disp)
#   .. .. ..- attr(*, "factors")= int [1:2, 1] 0 1
#   .. .. .. ..- attr(*, "dimnames")=List of 2
#   .. .. .. .. ..$ : chr [1:2] "mpg" "disp"
#   .. .. .. .. ..$ : chr "disp"
#   .. .. ..- attr(*, "term.labels")= chr "disp"
#   .. .. ..- attr(*, "order")= int 1
#   .. .. ..- attr(*, "intercept")= int 1
#   .. .. ..- attr(*, "response")= int 1
#   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
#   .. .. ..- attr(*, "predvars")= language list(mpg, disp)
#   .. .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
#   .. .. .. ..- attr(*, "names")= chr [1:2] "mpg" "disp"
#  - attr(*, "class")= chr "lm"

и

str(summary(model))
# List of 11
#  $ call         : language lm(formula = mpg ~ disp, data = mtcars)
#  $ terms        :Classes 'terms', 'formula'  language mpg ~ disp
#   .. ..- attr(*, "variables")= language list(mpg, disp)
#   .. ..- attr(*, "factors")= int [1:2, 1] 0 1
#   .. .. ..- attr(*, "dimnames")=List of 2
#   .. .. .. ..$ : chr [1:2] "mpg" "disp"
#   .. .. .. ..$ : chr "disp"
#   .. ..- attr(*, "term.labels")= chr "disp"
#   .. ..- attr(*, "order")= int 1
#   .. ..- attr(*, "intercept")= int 1
#   .. ..- attr(*, "response")= int 1
#   .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
#   .. ..- attr(*, "predvars")= language list(mpg, disp)
#   .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
#   .. .. ..- attr(*, "names")= chr [1:2] "mpg" "disp"
#  $ residuals    : Named num [1:32] -2.01 -2.01 -2.35 2.43 3.94 ...
#   ..- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
#  $ coefficients : num [1:2, 1:4] 29.59985 -0.04122 1.22972 0.00471 24.07041 ...
#   ..- attr(*, "dimnames")=List of 2
#   .. ..$ : chr [1:2] "(Intercept)" "disp"
#   .. ..$ : chr [1:4] "Estimate" "Std. Error" "t value" "Pr(>|t|)"
#  $ aliased      : Named logi [1:2] FALSE FALSE
#   ..- attr(*, "names")= chr [1:2] "(Intercept)" "disp"
#  $ sigma        : num 3.25
#  $ df           : int [1:3] 2 30 2
#  $ r.squared    : num 0.718
#  $ adj.r.squared: num 0.709
#  $ fstatistic   : Named num [1:3] 76.5 1 30
#   ..- attr(*, "names")= chr [1:3] "value" "numdf" "dendf"
#  $ cov.unscaled : num [1:2, 1:2] 1.43e-01 -4.85e-04 -4.85e-04 2.10e-06
#   ..- attr(*, "dimnames")=List of 2
#   .. ..$ : chr [1:2] "(Intercept)" "disp"
#   .. ..$ : chr [1:2] "(Intercept)" "disp"
#  - attr(*, "class")= chr "summary.lm"

Показывает, как выглядят отдельные вещи, и все, что похоже на matrix, может быть легко преобразовано с помощью as.data.frame() (опционально с stringsAsFactors=FALSE).

0 голосов
/ 15 июня 2019

Я решил проблему с помощью следующего кода:

coef <- ldply(modelsT, coef)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...