使用数字和整数列格式化markdown表

时间:2017-08-22 12:02:03

标签: r markdown knitr

knitr :: kable()如何忽略格式化整数列并格式化所有欧姆数字列?

示例:

knitr::kable(x = as.data.frame(rbind(c(1L, 21.211), c(2L, 31.233))), format.args = list("digits" = 2, "nsmall" = 2, "big.mark" = ".", "decimal.mark" = ",", "scientific" = FALSE))

它返回:

[1] "| V1| V2|" "|----:|-----:|" "| 1,00| 21,21|" "| 2,00| 31,23|"

我的输出是这样的:

[1] "| V1| V2|" "|----:|-----:|" "| 1| 21,21|" "| 2| 31,23|"

由于

1 个答案:

答案 0 :(得分:1)

j始终对所有数字列应用相同的格式,因此您唯一的选择是在调用之前转换为字符列,如J_F的参考建议。

我怀疑它是否可以完全自动化。您开始使用的数据框只有knitr::kable列; numeric值被integer转换为numeric。 (你可以通过不同的方式构建数据帧来避免这种情况。)假设你有一些方法来构造一个向量,指示你想要以哪种方式格式化哪些列,你可以自动执行以下操作:

c()

这会产生

df <- as.data.frame(rbind(c(1L, 21.211), c(2L, 31.233)))
intcolumn <- c(TRUE, FALSE)  # This is hard to automate

for (i in seq_len(ncol(df))) {
  if (intcolumn[i])
    df[[i]] <- format(df[[i]])
  else
    df[[i]] <- format(df[[i]], digits = 2, nsmall = 2, big.mark = ".", 
                      decimal.mark = ",", scientific = FALSE)
}
knitr::kable(df, align = "r") # right align as for numeric column