微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 kable 和 kableExtra 格式化单元格子集

如何解决使用 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 条件下,. 指的是起始数值(在 q1q2 列中)。

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()

输出

table with currency and percent in kable

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?