如何用corstarsl()函数实现干净的相关表输出?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用corstarsl()函数实现干净的相关表输出?相关的知识,希望对你有一定的参考价值。

有一个很好的相关表函数around(我知道的唯一一个对眼睛产生这种特殊的熟悉度)。 Bertold已经修改了代码以获得更好的输出。但是,有情况e。 G。当输出看起来有些混乱时,w /负相关。

在下面我首先显示函数,并在最小的示例下面显示:

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)
} 

例:

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 = ''))

输出中断:

编辑:左对齐我几乎就在那里,但如何给正值更多空间? enter image description here

预期产量:

enter image description here

有谁知道如何在函数内实现更好的结果格式化(小数点应该对齐)?

答案

您可以使用tableHTML并使用widths参数来控制列的宽度。此外,你需要使用&nbsp;这个空间的html字符,如下所示:

#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

以上是关于如何用corstarsl()函数实现干净的相关表输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何用数组(或任何其他支持加法以便它可以偏移的东西)干净地索引numpy数组[重复]

matlab中imagesc如何用C语言去实现

看我如何用云函数实现一个PC小程序代码包在线解密工具

如何用matlab计算皮尔逊相关系数

[Excel]如何用Excel计算相关系数r(三种方法)

如何用R语言做线性相关回归分析