2017-12-31 41 views
1

Es gibt eine nette Korrelationstabelle Funktion around (die einzige, die ich weiß, diese besondere Art von Vertrautheit mit dem Auge zu erzeugen). Bertold hat bereits den Code geändert, um eine bessere Ausgabe zu erreichen. Es gibt jedoch Situationen, z. G. w/negative Korrelationen, wenn die Ausgabe immer noch etwas durcheinander ist.Wie erreicht man eine saubere Korrelationstabelle mit der Funktion corstarsl()?

Im Folgenden zeigen I die Funktion erste und unterhalb eines Minimal Beispiel:

corstarsl <- function(x){ 
    # corstars1() computes a correlation matrix w/ significance stars 
    require(Hmisc) 
    x <- as.matrix(x) 
    R <- rcorr(x)$r 
    p <- rcorr(x)$P 

    ## define significance levels 
    mystars <- ifelse(p < .001, "***", 
        ifelse(p < .01, "** ", 
          ifelse(p < .05, "* ", " "))) 

    ## correlation matrix w/ two digits 
    R <- format(round(cbind(rep(- 1.11, ncol(x)), R), 2))[, -1] 

    ## build a new matrix that includes the correlations w/ appropriate stars 
    Rnew <- matrix(paste(R, mystars, sep = ""), ncol = ncol(x)) 
    diag(Rnew) <- paste(diag(R), " ", sep = "") 
    rownames(Rnew) <- colnames(x) 
    colnames(Rnew) <- paste(colnames(x), "", sep = "") 

    ## remove upper triangle 
    Rnew <- as.matrix(Rnew) 
    Rnew[upper.tri(Rnew, diag = TRUE)] <- "" 
    Rnew <- as.data.frame(Rnew) 

    ## remove last column and return the matrix (which is now a data frame) 
    Rnew <- cbind(Rnew[1:length(Rnew) - 1]) 
    return(Rnew) 
} 

Beispiel:

library(MASS) 
n <- 100 
mymeans <- c(10, 12, 15, 17) # means of each var 
Sigma <- matrix(c(1, -.45, .16, -.71, 
        -.45, 1, -.71, .09, 
        .16, -.71, 1, -.17, 
        -.71, .09, -.17, 1), ncol = 4) 
dat <- mvrnorm(n = n, mu = mymeans, Sigma, empirical = TRUE) 

(cortab <- corstarsl(as.data.frame(dat))) 
##   V1  V2  V3 
## V1       
## V2 -0.45***     
## V3 0.16 -0.71***  
## V4 -0.71*** 0.09 -0.17 

# or with htmlTable(): 
library(htmlTable) 
htmlTable(cortab, 
     align = paste(rep('l', ncol(cortab)), collapse = '')) 

Disrupted output:

bearbeiten: Mit dem linksbündig bin ich fast da, aber wie gebe ich den positiven Werten mehr Raum? enter image description here

Erwartete Ausgabe:

enter image description here

Wer weiß, wie man eine bessere Formatierung des Ergebnisses innerhalb der Funktion erreichen (Dezimalpunkten sollten ausgerichtet sein)?

+2

die Elemente linksbündig auszurichten und ein Leerzeichen vor positiven Korrelationen zu erzwingen? – ekstroem

+0

@ekstroem Ok, großartig, mit deinem Vorschlag habe ich herausgefunden, wie man die Werte in 'htmlTable()' linksbündig anordnet, siehe edit .. Aber wie fügt man den positiven Werten Raum hinzu? Kann ich den 'corsarsl()' Output irgendwie nicht verändern? – jaySf

Antwort

2

Sie können tableHTML verwenden und das Argument widths verwenden, um die Spaltenbreite zu steuern. Außerdem müssen Sie &nbsp; verwenden, die das HTML-Zeichen für einen Raum wie das ist:

#convert to character 
cortab[] <- lapply(cortab, as.character) 
#if the cell does not start with a minus add an html space 
cortab[] <- lapply(cortab, function(x) { 

ifelse(!startsWith(x, '-'), paste0('&nbsp;', x), x) 

}) 

#convert to html with tableHTML 
#control the column widths with the widths argument 
library(tableHTML) 
tableHTML(cortab, widths = c(40, 60, 60, 60), theme = 'scientific') %>% 
add_css_column(list('text-align', 'left !important'), columns = 1:4) 

enter image description here

+0

Schön, sieht viel besser aus, obwohl es immer noch nicht so veröffentlicht werden kann. Die ' ' scheint etwas zu viel. Aber da der Ansatz bekannt ist, danke, wird vielleicht die perfekte Lösung kommen. – jaySf

+0

Sie sind herzlich willkommen. HTML-Zeichen wie ' ' sind Standard bei HTML-Tabellen. Aus Neugier, warum wäre es nicht publizierbar? 'tableHTML' gibt Ihnen die Flexibilität, die Tabelle genau so zu gestalten, wie Sie es möchten. Ich habe hier nur ein Thema verwendet, aber Sie können die Tabelle genau so gestalten, wie Sie es wünschen, um veröffentlicht zu werden. Sehen Sie sich das [tutorial] (https://cran.r-project.org/web/packages/tableHTML/vignettes/tableHTML.html) an. Sie können jede Art von CSS hinzufügen, die Sie mögen. – LyzandeR

+0

Es ist nicht so, dass 'tableHTML' nicht nett oder so wäre! Wie ich geschrieben habe, sind die positiven Werte in der Tabellenausrichtung etwas zu viel richtig platziert. – jaySf

Verwandte Themen