我有一个非常宽的表(超过300列),并且希望通过包装这些列来显示它。在示例中,我将仅使用100列。
我要记住的是反复使用kable来显示表的子集:
library(kableExtra)
set.seed(1)
data = data.frame(matrix(rnorm(300, 10, 1), ncol = 100))
kable(data[, 1:5], 'latex', booktabs = T)
kable(data[, 6:10], 'latex', booktabs = T)
kable(data[, 11:15], 'latex', booktabs = T)
但这显然很乏味……我知道有按比例缩小的选项,但是由于我有很多列,所以这是不可能的。
有什么我可以在kable中扭曲的参数来实现的吗?
已更新: @ jay.sf的答案似乎运行良好,但在此未产生相同的结果。取而代之的是我得到了一些简单的代码-请您再看看一下,让我知道我可以改进什么地方?谢谢!
我的sessionInfo()
是:R version 3.5.1 (2018-07-02)
,其中rmarkdown::pandoc_version()
是1.19.2.1
。
答案 0 :(得分:2)
这个问题实际上比我乍看时要棘手。我使用了一些tidyverse
函数,特别是dplyr::select
来获取列,而purrr::map
则沿着列索引组移动。
我的想法是制作一个要选择的列索引向量列表,以使第一个列表项为1:20
,第二个列表项为21:40
,依此类推,以便打破将数据分成20个表,每个表5列(您使用的数字可以是ncol(data)
的不同因子)。我低估了这样做的工作量,但是从an old SO post获得了一些想法,沿着列数重复数字1到20,对其进行排序,然后将其用作分组然后拆分列。
然后这些向量中的每一个成为select
中的列索引。数据帧的结果列表每个都传递给knitr::kable
和kableExtra::kable_styling
。遗漏所有内容也将得到map
的默认打印名称,这不是理想的选择,因此我向purrr::walk
添加了一个调用,以使它们整齐地打印。
还请注意,以这种方式制作kable
表意味着将results="asis"
放入块选项中。
---
title: "knitr chunked"
output: pdf_document
---
```{r include=FALSE}
library(knitr)
library(kableExtra)
library(dplyr)
library(purrr)
set.seed(1)
data = data.frame(matrix(rnorm(300, 10, 1), ncol = 100))
```
```{r results='asis'}
split(1:ncol(data), sort(rep_len(1:20, ncol(data)))) %>%
map(~select(data, .)) %>%
map(kable, booktabs = T) %>%
map(kable_styling) %>%
walk(print)
```
PDF输出的顶部:
答案 1 :(得分:1)
您可以使用包含列号的矩阵,并将其放入带有ALTER table mytable ADD OldSellingPrice int;
UPDATE t
SET t.OldSellingPrice =
CASE WHEN NOT EXISTS(SELECT 1 FROM mytable t1 WHERE t.ParentPnxCode = t1.ParentPnxCode AND t1.LineNum < t.LineNum)
THEN CASE ParentPnxCode
WHEN 'X' THEN 1735
WHEN 'Y' THEN 3000
END
ELSE 0
END
FROM mytable t
函数的for循环中。
cat
结果