使用 summarytools freq 包添加变量标签

Add variable labels using the summarytools freq package

我想将 变量标签 添加到我生成的频率表中。但是,我在 summarytools documentation.

中找不到该功能

这是我的代码:

数据

library(magrittr)
library(dplyr)
library(gtsummary)
library(summarytools)
require(pander)
library(knitr)
library(stringr)

data_in_na <- readr::read_table2('q1    q2
No  somelongresponsethattakesupmorethanonline--somelongresponsethattakesupmorethanonline
No  somelongresponsethattakesupmorethanonline--somelongresponsethattakesupmorethanonline
No  somelongresponsethattakesupmorethanonline--somelongresponsethattakesupmorethanonline
No  somelongresponsethattakesupmorethanonline--somelongresponsethattakesupmorethanonline
No  Yes
No  Always
Yes No
Yes No
Yes No
NA  NA
NA  NA
NA  NA
NA  NA
')


vct <- data_in_na %>% names(.)

创建频率的函数

create_freq <- function(v1) {
  #names <- c("var name 1", "var name 2")
  
  freq(v1,
       cumul = FALSE, 
       totals = TRUE,
       display.type = FALSE,
       variable.label = v1, 
       missing ='missing', 
       report.nas = TRUE)
}

通过所有变量循环到 运行

for (i in vct) {
  tbl <- create_freq(data_in_na[i])   # build gtsummary table
  print(tbl)       # print table
  cat('\n\n----------------------------------------------------------\n\n')
  # d <- table(data_in[i])
  # print(kable(d))
  
}

我想要的

有什么建议吗??

这会添加一个关于字段名称的“可变”标签并删除双主题标签。我还将 940 像素的标准最大宽度调整为 1000 像素——但是,如果实际的长名称比您的示例数据长很多,这将无济于事。我提供了注释(// 在 JS 中的内联注释之前),以便您可以看到 Javascript 的每个区域在做什么。您无需为 Javascript 做任何特殊操作(它内置于 R Markdown 中)。

按原样使用您的代码,将以下内容作为块添加到之后您的代码。

如果您尝试 运行 此块内联,它不会产生输出。但是,您会在渲染时看到输出。

对于添加到问题标签的问题,我对其进行了编辑以提供两种不同的方法来执行此操作。一个用R,一个用JS。

我建议使用 R,因为它是原生的。但是您可能有自己不这样做的原因。这违反了良好的命名习惯,但它可以仅用于这些表(如果需要)。

R 版本是选项 1。此代码介于数据收集和将变量名称存储在 vct 之间。 (实际上,我在这段代码中添加了 vct。)

```{r optQuestions, include = F,eval=F}
# not sure how you have the questions stored
# let's say you have the questions stored in a vector
questions = c("How often do you exercies?", "Do you like apples?")
qLabs = names(data_in_na)

names(data_in_na) <- paste(qLabs, questions)

vct <- data_in_na %>% names(.)
```

现在对于 JS - 2 行等同于执行 paste 在 R 块中执行的操作。使用一个或另一个,您将看不到此数据的具体差异。虽然,如果有很多问题,您可能会发现 R 方法更可取。

```{r styler,results='asis',engine='js'}

// search for class and tags
elem = document.querySelector('div.hereForMod > pre > code');
// remove hashtags
elem.innerHTML = elem.innerHTML.replace(/#{2}/g, '');

// I missed what you wanted for the questions -- 
// this is option TWO: // add // if you want to ignore them (or delete)
elem.innerHTML = elem.innerHTML.replace(/q1/g, 'q1 How often do you exercise?')
elem.innerHTML = elem.innerHTML.replace(/q2/g, 'q2 Do you like apples?')

// change max width
newMax = "max-width:1000px;";  //currently 940
elem2 = document.querySelector('.main-container'); // find what to change
styler = elem2.getAttribute("style");          // get current inline styles
if(styler==undefined || styler==null){ 
  styler="";
}
elem2.setAttribute("style", styler+newMax);    // set new style settings 

```

如果将 eval=FALSE 添加到块中,您可以在不使用它时看到它发生了什么变化。

如果您想要 Variables 以外的词,则必须调整 Freq 旁边的值。 (目前,该值为 12。)您还需要确保在该词和 Freq.

之间保持相同数量的空格

如果您有任何问题,请告诉我。

编辑前:

编辑后: