1

假设我的数据框 (df) 只包含这个单个字符变量:

race.ethnicity<-c("W", "C", "F", "F", "J")

我想为前 2 个类别创建频率表。如下表(虽然它包括前 15 个类别)

在此处输入图像描述

我正在为我的频率表使用 gtsummary。

以下是代码:

# summarize the subdata
table1 <- tbl_summary(df, missing = "always",                              
                      missing_text = "(Missing)",
                      percent = "cell", 
                      type = all_dichotomous() ~"categorical"
) %>%
  bold_labels()
#export to latex(pdf is not available in the package)
as_kable_extra(table1, format = "latex")

使用我当前的代码集,我无法按频率获得输出。所以任何建议都会受到欢迎。

如果除了使用之外还有其他建议来创建像上面那样的表格,gtsummary请分享。我只是想让 R 也吐出 Latex 代码。

4

4 回答 4

3

使用 xtabs 进行频率计数,将其转换为数据框,排序并取前两行。不使用任何包。

dat <- as.data.frame(xtabs(~ race.ethnicity))
dat2 <- head(dat[order(-dat$Freq), ], 2)
dat2

给予:

  race.ethnicity Freq
2              F    2
1              C    1

要获得乳胶:

library(kableExtra)
kable(dat2, "latex")

给予:

\begin{tabular}{l|l|r}
\hline
  & race.ethnicity & Freq\\
\hline
2 & F & 2\\
\hline
1 & C & 1\\
\hline
\end{tabular}

或将其编写为以下管道:

 library(dplyr)
 library(kableExtra)

 xtabs(~ race.ethnicity) %>%
   as.data.frame %>%
   arrange(desc(Freq)) %>%
   slice(1:2) %>%
   kable("latex")

或者

 library(kableExtra)

 xtabs(~ race.ethnicity) %>%
   { .[order(- .)] } %>%
   head(2) %>%
   kable("latex")
于 2021-03-16T23:05:17.153 回答
2

我们可以使用table(不使用任何包)

tbl1 <- table(race.ethnicity)
stack(head(tbl1[order(-tbl1)], 2))
于 2021-03-16T23:12:44.213 回答
2

我最简单的方法是结合使用 forcats 和 gtsummary 包。首先,我们将使用forcats::fct_infreq()重新排序变量,将最频繁的级别放在首位。然后我们将使用forcats::fct_lump_n()保留两个最频繁的级别,所有其他级别将集中在一个 Other 类别中。最后,

library(gtsummary)
library(forcats)

gt::pizzaplace %>%
  select(name) %>%
  mutate(
    name =
      # re-order with most frequent first
      fct_infreq(name) %>% 
      # keep top two groups; all others in to Other categort
      fct_lump_n(n = 2)) %>%
  tbl_summary() 

在此处输入图像描述

as_kable_extra(x, format = "latex")您可以使用或转换为乳胶as_hux_table(x) %>% huxtable::to_latex()

于 2021-04-04T01:03:44.990 回答
2

一个gtsummary解决方案:

library(dplyr)
library(gtsummary)

race.ethnicity %>% 
  tbl_summary(
    statistic = list(all_categorical() ~ "{n} / {N} ({p}%)")
  ) 

数据:

race.ethnicity<- tibble(variable=c("W", "C", "F", "F", "J"))

在此处输入图像描述

于 2021-04-04T02:27:42.203 回答