首页 > 解决方案 > 如何命名一列矩阵行名

问题描述

我正在尝试使用kable包创建此表,

在此处输入图像描述

我已经复制了表格,但我无法命名第一列。如何包含先前经验列标题?该表由矩阵对象制成。

这是我使用的代码:

```{r, echo=FALSE, warning=FALSE, message=FALSE}
source(here::here("05_Results.R"), local = knitr::knit_global())
library(formattable)
library(kableExtra)
options(knitr.kable.NA = '')

# put matrices together
m <- matrix(rbind(t(pij), t(se_pij)), ncol = ncol(pij), byrow = T)
blank <- c("", "", "")
obs <- matrix(rbind(t(nij), t(blank)), ncol = 1, byrow = T)
obs <- apply(obs , 2, as.numeric)
m <- cbind(m, obs)
rownames(m) <- c("Downgraded", "", "Unchanged", "", "Upgraded", "")
colnames(m) <- c("Downgraded",  "Unchanged",    "Upgraded", "Obs.")

m[1:6,1:3] <- scales::percent(m[1:6, 1:3], accuracy = 0.01)

m[c(2,4,6),1:3] <- matrix(paste0("(", format(unlist(m[c(2,4,6), 1:3])),")"), nrow = 3, byrow = FALSE)


m %>%
  kable(
    longtable = FALSE,
    format = "latex",
    booktabs = TRUE,
    align = c("l", "c", "c", "c", "c"),
    linesep = "\\addlinespace",
    caption = "All Cooperatives Rating History Dependence, 1996-2014"
  ) %>%
  add_header_above(c(" ", "Subsequent Experience" = 3))
```

我的数据:

nij <- c(Downgraded = 811, Unchanged = 983, Upgraded = 841)

pij <- structure(c(0.168927250308261, 0.32146490335707, 0.454221165279429, 
0.274969173859433, 0.458799593082401, 0.392390011890606, 0.556103575832306, 
0.219735503560529, 0.153388822829964), class = "table", .Dim = c(3L, 
3L), .Dimnames = list(i = c("Downgraded", "Unchanged", "Upgraded"
), j = c("Downgraded", "Unchanged", "Upgraded")))

se_pij <- structure(c(0.0131570628879201, 0.014896223560517, 0.0171689616489814, 
0.0156786914420421, 0.0158932900891351, 0.0168373378492297, 0.0174464969960683, 
0.0132066990320836, 0.0124262720735792), class = "table", .Dim = c(3L, 
3L), .Dimnames = list(i = c("Downgraded", "Unchanged", "Upgraded"
), j = c("Downgraded", "Unchanged", "Upgraded")))

标签: rmatrixr-markdown

解决方案


用语句替换rownamesand语句:colnamesdimnames

dimnames(m) <- list("Prior Experience"=c("Downgraded", "", "Unchanged", "", "Upgraded", ""), "Subsequent Experience"=c("Downgraded",  "Unchanged",    "Upgraded", "Obs."))
print(m, digits=3)
#                 Subsequent Experience
# Prior Experience Downgraded Unchanged Upgraded Obs.
#       Downgraded     0.1689    0.2750   0.5561  811
#                      0.0132    0.0157   0.0174   NA
#       Unchanged      0.3215    0.4588   0.2197  983
#                      0.0149    0.0159   0.0132   NA
#       Upgraded       0.4542    0.3924   0.1534  841
#                      0.0172    0.0168   0.0124   NA

推荐阅读