【问题标题】:How to highlight the max of each column in a contingency table?如何突出列联表中每一列的最大值?
【发布时间】:2016-06-08 22:13:38
【问题描述】:

我试图在 R 的列联表中突出显示每一列的最大值。

到目前为止我尝试了什么

tbl <- as.matrix(table(c(iris[5], data.frame(Petal.Width = cut(iris$Petal.Width, 3)))))
pos <- cbind(apply(tbl, 2, which.max), 1:dim(tbl)[2])
tbl <- addmargins(tbl)

# First attempt
tbl2 <- tbl
tbl2[pos] <- -tbl2[pos]
tbl2
##             Petal.Width
## Species      (0.0976,0.9] (0.9,1.7] (1.7,2.5] Sum
##   setosa              -50         0         0  50
##   versicolor            0       -49         1  50
##   virginica             0         5       -45  50
##   Sum                  50        54        46 150

# Second attempt
tbl2 <- tbl
tbl[pos] <- paste("*", tbl[pos])
print(tbl, justify = "right")
##             Petal.Width
## Species      (0.0976,0.9] (0.9,1.7] (1.7,2.5] Sum 
##   setosa     * 50            0         0        50
##   versicolor    0         * 49         1        50
##   virginica     0            5      * 45        50
##   Sum          50           54        46       150

如果我能找到将"-" 更改为"* " 但保留数字数据类型的可能性,第一次尝试会奏效。

如果我能找到将值(现在是字符串)与列名右对齐的可能性,第二次尝试将起作用。

我的问题
您能否给我一个解决方案来使这些尝试中的至少一个起作用 - 或者一个完全不同的解决方案,我可以使用它突出列联表中每一列的最大值?

谢谢

【问题讨论】:

    标签: r printing highlight highlighting contingency


    【解决方案1】:

    你可以试试 'formattable' 包。

    install.packages("formattable")
    library(formattable)
    
    tbl_df <- as.data.frame.matrix(tbl)
    tbl_df_sub <- tbl_df[1:3,]
    
    t <- formattable(tbl_df_sub, list(
      '(0.0976,0.9]'=color_tile("white", "green"),
      '(0.9,1.7]'=color_tile("white", "green"),
      '(1.7,2.5]'=color_tile("white", "green")
    ))
    

    结果:

    缺点是它只能导出为图像或 html 小部件,而不是实际的表格(尽管表格在 R 中仍然可用)。

    这可能不是您想要的,但我不知道您的目标是什么。如果您只是想在 R 控制台中突出显示表格并且仍然使用表格值本身,那么我的解决方案不是很好。您不能简单地将您的第一个解决方案用于视觉效果,但保留原始表格的副本以用于您想用它做的任何其他事情吗?

    【讨论】:

      【解决方案2】:

      由于R中不同打印方法之间的一些不一致,解决方案比较出乎意料:

      tbl2 <- tbl
      tbl[pos] <- paste("*", tbl[pos])
      print(tbl, quote = FALSE, right = TRUE)
      ##             Petal.Width
      ## Species      (0.0976,0.7] (0.7,1.3] (1.3,1.9] (1.9,2.5] Sum
      ##   setosa             * 50         0         0         0  50
      ##   versicolor            0      * 28      * 22         0  50
      ##   virginica             0         0        21      * 29  50
      ##   Sum                  50        28        43        29 150
      

      print.matrix 上的文档说:

      print.matrixprint.default 都是打印矩阵,每个都有 至少是另一个缺少的可选参数。另外,两者都直接 直接分派到.Internal 代码,而不是依赖于每个 其他。这主要源于历史兼容性和类似 将来应该改变原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多