对 R table 函数进行故障排除以创建外观更完整的 table

Troubleshooting R table function to create a more complete-looking table

我正在尝试为总共 3 个问题的调查问卷(答案分级为 1-5)创建一个相对百分比值的 table。

我正在使用 formattable 库将 table 中的值转换为百分比,但到目前为止我无法将问题 1、2 和 3 的结果组合成1 table。 我写的代码是:

tableq1<-percent(table(Q1val)/length(na.omit(Q1val)))
tableq1

当前输出为:

我需要做什么才能实现这一目标? 最终,我希望将此 table 设为 pdf 或 png,并使用网格线使其看起来干净专业。

每个请求:

dput(Q1val)

c(4, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 4, 4, 3, 4, 5, 
4, 5, 1, 5, 5, 5, 4, 5, 4, 3, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 
5, 5, 3, 5, 5, 4, 4, 4, 4, 5, 2, 5, 4, NA, 5, 5, 5, 3, 5, 5, 
4, 5, 5, 4, 5, 5, 4, 4, 5, 4, 5, 5, 4, 5, 5, 5, 5, 5, 4, 5, 4, 
4, 3, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 4, 4, 3, 5, 5, 5, 5, 4, 3, 
4, 5, 4, 4, 5, 5, 4, 4, 5, 5, 4, 5, 4, 4, 4, 5, 4, 4, 5, 5, 5, 
5, 5, 4, 4, 5, 4, 5, 5, 5, 2, 4, 2, 5, 5, 3, 4, 3, 4, 5, 5, 4, 
4, 3, 5, 5, 4, 5, 4, 3, 5, 3, 4, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 4, 5, 5, 3, 3, 4, 5, 4, 5, 5 # , ...
)

为了改进我的评论,我选择使用 kableExtra 包呈现结果。

解决方案

首先加载合适的包:

library(dplyr)
library(formattable)
library(kableExtra)

在您的工作区中生成 Q*val 向量后...

# ...
# Code to generate 'Q1val', 'Q2val', ...
# ...

...然后 运行 此工作流将它们合并为一个应急事件 table:

# Identify all the 'Q*val' vectors.
q_names <- ls(pattern = "Q\d+val")


# Assemble a single table.
q_all <- q_names %>%
  # Capture those vectors in a (named) list.
  mget(inherits = TRUE) %>%
  # Turn each vector into a contingency table of percentages.
  sapply(
    FUN = function(x) { 
      percent(table(x) / length(na.omit(x)))
    },
    simplify = FALSE
  ) %>%
  # Stack those contingency tables into a single table.
  do.call(what = bind_rows) %>%
  # Convert to 'data.frame' to preserve row names.
  as.data.frame() %>%
  # Add row names of "Q1", "Q2", ...; as extracted from the names "Q1val", "Q2val", ...
  `rownames<-`(value = gsub(
     x = q_names,
     pattern = "^(Q\d+)(val)$",
     replacement = "\1"
  ))

然后您可以美化 table 并将其导出为图像。

# Prettify the table.
q_pretty <- q_all %>%
  # Convert into 'kable' object.
  kbl() %>%
  # Border the rows and stripe the cells.
  kable_styling(
    bootstrap_options = c("bordered", "striped")
    
    # ...
    # Further styling as desired.
    # ...
    
  ) # %>%
  
  # ...
  # Further 'kable' adjustments as desired.
  # ...


# Save pretty table as PNG image.
save_kable(
  x = q_pretty,
  file = "pretty.png"
)

备注

您可以通过将 "pretty.png" 替换为 "pretty.pdf" 来轻松保存为 PDF。

结果

我不得不即兴创作自己的 Q2valQ3val,但结果 pretty.png 应该如下所示: