如何解决使用 kable 和 kableExtra 格式化单元格子集
我正在尝试通过一个简单的任务熟悉 rmarkdown。但是,我在渲染表格时遇到了一个基本步骤。我希望一些行/列组合以货币格式和一些百分比格式。考虑这个简化的设置和数据框,重点是百分比问题:
library(tidyverse)
library(kableExtra)
#>
#> Attaching package: 'kableExtra'
#> The following object is masked from 'package:dplyr':
#>
#> group_rows
library(formattable)
year <- c('2014','2015','pctDiff')
q1 <- c(35288,36032,0.0211)
q2 <- c(30273,29669,-.0172)
df <- data.frame(year,q1,q2)
df
#> year q1 q2
#> 1 2014 35288.0000 30273.0000
#> 2 2015 36032.0000 29669.0000
#> 3 pctDiff 0.0211 -0.0172
df %>% percent(.[3,c(2:3)],0)
#> Error in as_numeric(x): 'list' object cannot be coerced to type 'double'
percent(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)。
如果您希望列混合并包含“%”或“$”,则这些列需要是字符。
如果是第三行,则为TRUE条件,设置as.character(percent(.))
。这会将值转换为百分比,并使其成为字符值。
如果它是不是第三行(即它是第 1 行或第 2 行),则它是 FALSE 条件,并设置为 as.character(currency(.))
。类似地,它将值转换为货币,然后确定它是一个字符值。
在 TRUE 和 FALSE 条件下,.
指的是起始数值(在 q1
或 q2
列中)。
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()
输出
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。