Объедините строки различной длины в один в R - PullRequest
0 голосов
/ 04 июля 2018

Представьте, что у меня есть следующие результаты:

>coef(model1)
                   Estimate  Std. Error    t-value     Pr(>|t|)
    X1           -1.3006813 1.962377480 -0.6628089 5.079128e-01
    X2          -12.1455641 5.838937045 -2.0800985 3.828320e-02
    X3           11.0701123 9.367725395  1.1817290 2.381590e-01
    X4            3.2903167 0.690324322  4.7663346 2.810855e-06
    X5            0.0240804 0.005345124  4.5051151 9.201743e-06
    X6            0.1834814 0.047485944  3.8639097 1.341940e-04

и

>coef(model2)
                       Estimate  Std. Error    t-value     Pr(>|t|)
        X1           -1.3180103 1.962377480 -0.6628089 5.079128e-01
        X2          -10.5006410 5.838937045 -2.0800985 3.828320e-02

и

>coef(model6)
                           Estimate  Std. Error    t-value     Pr(>|t|)
            X2           -1.3256782 1.962377480 -0.6628089 5.079128e-01
            X6          -1.56931410 5.838937045 -2.0800985 3.828320e-02    

Что я хочу сделать, это создать эту таблицу, где каждая строка представляет собой коэффициенты каждой модели:

 X1      X2    X3      X4     X5     X6
-1.300 -12.145 11.070 3.290  0.0240 0.183
-1.318 -10.500
       -1.325                      -1.569

Есть предложения? * В идеале я хотел бы добавить * if p-value>0.05, ** if p-value>0.01 and *** if <0.01, чтобы он был мгновенно добавлен к латексу с library(xtable).

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Это работает:

library(tidyverse)

data <- list(model1, model2, model6)

data %>% 
  map_df(rownames_to_column, "Var", .id = 'Model') %>%
  select(Model, Var, Estimate) %>%
  spread(Var, Estimate)

|Model |        X1|         X2|       X3|       X4|        X5|         X6|
|:-----|---------:|----------:|--------:|--------:|---------:|----------:|
|1     | -1.300681| -12.145564| 11.07011| 3.290317| 0.0240804|  0.1834814|
|2     | -1.318010| -10.500641|       NA|       NA|        NA|         NA|
|3     |        NA|  -1.325678|       NA|       NA|        NA| -1.5693141|

Данные:

model1 <- read.table(text = "
Estimate  Std.Error    t-value     Pr(>|t|)
X1           -1.3006813 1.962377480 -0.6628089 5.079128e-01
X2          -12.1455641 5.838937045 -2.0800985 3.828320e-02
X3           11.0701123 9.367725395  1.1817290 2.381590e-01
X4            3.2903167 0.690324322  4.7663346 2.810855e-06
X5            0.0240804 0.005345124  4.5051151 9.201743e-06
X6            0.1834814 0.047485944  3.8639097 1.341940e-04
", h = T)


model2 <- read.table(text = "
Estimate  Std.Error    t-value     Pr(>|t|)
X1           -1.3180103 1.962377480 -0.6628089 5.079128e-01
X2          -10.5006410 5.838937045 -2.0800985 3.828320e-02
", h = T)

model6 <- read.table(text = "
Estimate  Std.Error    t-value     Pr(>|t|)
X2           -1.3256782 1.962377480 -0.6628089 5.079128e-01
X6          -1.56931410 5.838937045 -2.0800985 3.828320e-02  
", h = T)

Не совсем уверен, что вы подразумеваете под битами звезд, но их можно добавить с помощью оператора case_when в трубе

0 голосов
/ 04 июля 2018

Я думаю, что это может быть более кратким, но для начала вы можете использовать это. Кроме того, я использовал округление, поэтому -1.3006813 становится -1.301 в моем коде, а не 1.300. Также обратите внимание, что Pr...t.. - это просто имя столбца Pr(>|t|), плохо прочитанное.

library(plyr)
library(dplyr)
library(tidyr)

myfunction <- function(x){
  x %>% 
mutate(Std. = round(Std., 3),
       Std.Adjusted = ifelse(Pr...t.. > 0.05, paste0(Std., "*"), ifelse(Pr...t.. < 0.05 & Pr...t.. > 0.01, paste0(Std., "**"), paste0(Std., "***")))) %>% 
  select(Estimate, Std.Adjusted) %>% 
  spread(Estimate, Std.Adjusted)
}

rbind.fill(lapply(list(mod1,mod2,mod6), myfunction))

       X1        X2     X3      X4       X5       X6
1 -1.301* -12.146** 11.07* 3.29*** 0.024*** 0.183***
2 -1.318* -10.501**   <NA>    <NA>     <NA>     <NA>
3    <NA>   -1.326*   <NA>    <NA>     <NA> -1.569**

DATA:

mod1 <- read.table(text = "
Estimate  Std. Error    t-value     Pr(>|t|)
X1           -1.3006813 1.962377480 -0.6628089 5.079128e-01
X2          -12.1455641 5.838937045 -2.0800985 3.828320e-02
X3           11.0701123 9.367725395  1.1817290 2.381590e-01
X4            3.2903167 0.690324322  4.7663346 2.810855e-06
X5            0.0240804 0.005345124  4.5051151 9.201743e-06
X6            0.1834814 0.047485944  3.8639097 1.341940e-04
", h = T)


mod2 <- read.table(text = "
Estimate  Std. Error    t-value     Pr(>|t|)
X1           -1.3180103 1.962377480 -0.6628089 5.079128e-01
X2          -10.5006410 5.838937045 -2.0800985 3.828320e-02
", h = T)

mod6 <- read.table(text = "
Estimate  Std. Error    t-value     Pr(>|t|)
X2           -1.3256782 1.962377480 -0.6628089 5.079128e-01
X6          -1.56931410 5.838937045 -2.0800985 3.828320e-02  
", h = T)
...