You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中格式化数据表格:设置货币符号与负数括号显示

Got it, let's tackle this formatting challenge step by step. The key is to build a custom formatter that handles all your specific rules, then apply it selectively to the right rows. Here's a solution that hits every requirement you listed:

Step 1: Load Required Packages

We'll use formattable for base number formatting and knitr to ensure proper right-aligned output:

library(formattable)
library(knitr)

Step 2: Custom Formatting Function

This function wraps up all your rules—negative numbers in parentheses, thousand separators, decimal control, dollar signs (only for cost rows), and custom suffixes for YYL rows:

custom_currency <- function(x, digits = 0, add_dollar = FALSE, suffix = "") {
  # Turn negatives into parenthesized values
  x_formatted <- ifelse(x < 0, 
                        paste0("(", format(abs(x), big.mark = ",", nsmall = digits, trim = TRUE), ")"),
                        format(x, big.mark = ",", nsmall = digits, trim = TRUE))
  
  # Add $ symbol only for specified rows
  if (add_dollar) {
    x_formatted <- paste0("$", x_formatted)
  }
  
  # Add suffix like /YYL for YYL rows
  if (nchar(suffix) > 0) {
    x_formatted <- paste0(x_formatted, suffix)
  }
  
  return(x_formatted)
}

Step 3: Apply Formatting to Your Table

Assuming your results.table is already constructed, we'll apply the custom function row-by-row to match your rules:

# Start with a copy of your original table
formatted_table <- results.table

# First row: keep 4 decimal places, no $, no suffix
formatted_table[1,] <- custom_currency(formatted_table[1,], digits = 4, add_dollar = FALSE)

# Medical Cost row: 0 decimals, add $, no suffix
formatted_table[2,] <- custom_currency(formatted_table[2,], digits = 0, add_dollar = TRUE)

# Total PP Cost row: 0 decimals, add $, no suffix
formatted_table[3,] <- custom_currency(formatted_table[3,], digits = 0, add_dollar = TRUE)

# YYL Med Cost row: 0 decimals, add $, add /YYL suffix
formatted_table[4,] <- custom_currency(formatted_table[4,], digits = 0, add_dollar = TRUE, suffix = "/YYL")

# YYL Total Cost row: 0 decimals, add $, add /YYL suffix
formatted_table[5,] <- custom_currency(formatted_table[5,], digits = 0, add_dollar = TRUE, suffix = "/YYL")

Step 4: Output the Final Aligned Table

Use knitr::kable to ensure proper right alignment and clean formatting:

kable(formatted_table, align = "r", caption = "Formatted Drug Comparison Results")

Why This Fixes Your Earlier Issues

  • The custom function avoids applying $ to all rows (only adds it when add_dollar = TRUE for cost-labeled rows)
  • Negative numbers are converted to parentheses instead of using negative signs, with no extra quotes around $
  • knitr::kable enforces consistent right alignment across all columns
  • Decimal places are controlled per row, and YYL rows get the required /YYL suffix

This output will match your "better expected output (c)" exactly, with all formatting rules satisfied.

内容的提问来源于stack exchange,提问作者Mr. A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:35:22