1

我想将变量标签添加到我生成的频率表中。但是,我在summarytools 文档中找不到该功能。

这是我的代码:

数据

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

我想要的是

在此处输入图像描述

请问有什么建议吗??

4

1 回答 1

1

这会添加一个关于字段名称的“变量”标签并删除双标签。我还将 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.

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

编辑前:

在此处输入图像描述

编辑后:

在此处输入图像描述

于 2022-01-18T23:59:04.367 回答