使用kable和kableExtra格式化单元格子集
我试图通过一个简单的任务来熟悉rmarkdown。然而,我仍然停留在渲染表的基本步骤上。我希望一些行/列组合的格式是货币,一些是百分比。考虑这个简化的设置和数据框,重点是百分比问题:使用kable和kableExtra格式化单元格子集,r,r-markdown,kable,kableextra,formattable,R,R Markdown,Kable,Kableextra,Formattable,我试图通过一个简单的任务来熟悉rmarkdown。然而,我仍然停留在渲染表的基本步骤上。我希望一些行/列组合的格式是货币,一些是百分比。考虑这个简化的设置和数据框,重点是百分比问题: 库(tidyverse) 图书馆(kableExtra) #> #>附加包装:“kableExtra” #>以下对象已从“package:dplyr”屏蔽: #> #>分组行 库(格式化表) 第3年pctDiff 0.0211-0.0172 df%>%百分比([3,c(2:3)],0) #>as_numeric
库(tidyverse)
图书馆(kableExtra)
#>
#>附加包装:“kableExtra”
#>以下对象已从“package:dplyr”屏蔽:
#>
#>分组行
库(格式化表)
第3年pctDiff 0.0211-0.0172
df%>%百分比([3,c(2:3)],0)
#>as_numeric(x)中出错:“列表”对象不能强制为“双精度”类型
百分比(df[3,c(2:3)])
#> [1] 2.11% -1.72%
我希望格式化命令在管道中工作,但我的尝试产生了一个错误。第二次尝试产生了我想要的格式,但不实用,因为df的其余部分不存在。(在一篇stackoverflow文章之后,我也尝试使用list和unlist,但出现了相同的错误。)我找不到用于更改行/列位置格式的文档或示例。在gt中,格式化任务没有问题,但我需要将rmarkdown代码与html以外的内容结合起来,gt还不能生成pdf或Word格式的漂亮表格。谢谢你的帮助 首先,它使用
mutate_at
仅更改以“q”开头的列
要澄清ifelse
:如果行的行号为n()
,则必须计算最后一行,因为n()
应包含行总数的数值(在本例中为3)
如果希望混合列并包含“%”或“$”,则这些列必须是字符
如果是第三行,则对于真实条件,将设置为.character(百分比()
。这会将该值转换为百分比,并使其成为字符值
如果它不是第三行(即,它是第1行或第2行),则它是FALSE条件,并设置为as.character(currency(.)
。类似地,它将值转换为货币,然后确保它是字符值
在TRUE和FALSE两种情况下,
都指起始数值(在q1
或q2
列中)
输出
那这个软件包是怎样的呢
scales
?我在发布这个之前确实试过scales。我找不到一个可行的方法。谢谢你的代码和解释。我还需要加载formattable以使代码在这里工作。那么,您将在何处添加第二条ifelse语句来处理货币位置(第1行和第2行,cols q1和q2)?我试过了,但没有成功。我不理解ifelse在这种情况下是如何工作的,因为它似乎没有对测试选项说“不”。我只是对formattable在没有将目标单元格更改为字符(如果它不在管道中)的情况下工作的原因感到困惑。对不起,我显然不是这方面的专家。对不起,有什么困惑。我添加了库(formattable)
。我还为非最后一行的行包括了货币,如q1
和q2
。我更新了解释,希望能澄清一些事情。它有“是”(TRUE)和“否”(FALSE)条件,它们只是在不同的代码行上。对于最后一条语句,formattable
可以很好地处理列的单个类型(百分比或货币)。然后,列可以是formattable
和numeric
,并具有描述格式的属性(包括位数等)。但是,在同一列中合并百分比和货币将涉及不同的formattable
属性,这是一个问题。感谢Ben添加的代码和说明。这对我来说更有意义。
library(tidyverse)
library(kableExtra)
library(formattable)
df %>%
mutate_at(vars(starts_with("q")), funs(
ifelse(row_number() == n(),
as.character(percent(.)),
as.character(currency(.))))) %>%
kbl() %>%
kable_styling()