【问题标题】:xtable align right and set width Rmarkdownxtable 右对齐并设置宽度 Rmarkdown
【发布时间】:2016-10-21 10:04:46
【问题描述】:

我有一个数据框,我想在 Rmarkdown 中将它变成一个右对齐的表格

---
title: "Test"
output: 
  pdf_document
---

```{r testing, results='asis'}
library(xtable)
df <- structure(list(ID = c(101L, 102L, 103L, 104L, 105L, 106L), 
                       Gr1 = c(10.76,983.4, 34.000, 20, 23.8457, 13.32),
                       Gr2 = c(NA,NA, NA, 20L, NA, NA)
                       ), 
                  .Names = c("ID", "Grade1", "Grade2"), 
                  class = c("tbl_df", "data.frame"), 
                  row.names = c(NA, -6L))
xtable(df,
       align = c('l', 'p{1.5in}', rep('r{0.5in}',2)), 
       digits=c(0,0,1,0))
```

这给了我rep('r{0.5in}',2) 的错误

! LaTeX Error: Illegal character in array arg.

我也试过了:align = c('l|', 'p{1.5in}|', rep('R{0.5in}|',2))

以下工作正常:align = c('l', 'p{1.5in}', rep('p{0.5in}',2))

但是数据是左对齐的

【问题讨论】:

  • 我不明白你的意思:如果你想把最后两列放在右边,那么rep('r',2)。只有参数 p 有宽度参数。
  • 但这不会去掉最后两列的宽度参数吗?我需要宽度和右对齐
  • r,l,c 默认情况下不采用宽度参数。您需要创建一个自定义列类型,例如 R,L,C 以获得所需的结果,您可以找到 Here

标签: r r-markdown xtable


【解决方案1】:

这是您的表格的近似值。我不知道我的宽度完全正确。显然,pixiedust 发生了一些可疑的事情,因为当我将 width_units"cm" 更改为 "in" 时,我得到的表太宽了。

---
title: "Test"
output: 
  pdf_document
header-includes: 
- \usepackage{amssymb} 
- \usepackage{arydshln} 
- \usepackage{caption} 
- \usepackage{graphicx} 
- \usepackage{hhline} 
- \usepackage{longtable} 
- \usepackage{multirow} 
- \usepackage[dvipsnames,table]{xcolor} 
---

```{r testing, results='asis'}
library(pixiedust)
df <- structure(list(ID = c(101L, 102L, 103L, 104L, 105L, 106L), 
                       Gr1 = c(10.76,983.4, 34.000, 20, 23.8457, 13.32),
                       Gr2 = c(NA,NA, NA, 20L, NA, NA)
                       ), 
                  .Names = c("ID", "Grade1", "Grade2"), 
                  class = c("tbl_df", "data.frame"), 
                  row.names = c(NA, -6L))
dust(df, keep_rownames = TRUE,
     float = FALSE) %>%
  sprinkle_colnames(.rownames = "") %>%
  medley_bw() %>%
  sprinkle_table(cols = ".rownames",
                 border = "right") %>%
  sprinkle_table(cols = c("Grade1", "Grade2"),
                 halign = "right") %>%
  sprinkle(cols = c("ID", "Grade1", "Grade2"),
           width = c(1.5, 0.05, 0.05),
           width_units = "cm",
           na_string = "",
           recycle = "cols") %>%
  sprinkle(cols = "Grade1",
           fn = quote(sprintf("%.1f", value)))

```

【讨论】:

    【解决方案2】:

    已解决,我必须创建两个包含文件来注入必要的乳胶。首先更新markdown文件上的YAML:

    ---
    title: "Test something"
    output: 
      pdf_document:
        includes:
          in_header: preamble-latex.tex
          before_body: prebody-latex.tex
    ---
    <SNIP, SEE ABOVE>
    

    然后创建preamble-latex.tex来加载数组包

    \usepackage{array}
    

    并创建prebody-latex.tex 来存储您的新列命令

    \newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-01
      • 2021-02-26
      • 2020-06-04
      • 2013-12-04
      • 1970-01-01
      • 2011-10-20
      • 2011-11-25
      • 2016-01-17
      相关资源
      最近更新 更多