如何将字符变量的频率从最高到最低排序

How to order frequency from highest to lowest for character variable

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

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

我想为前 2 个类别创建频率 table。喜欢下面的table(虽然它包括前15个类别)

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

代码如下:

# 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 之外还有其他创建像上面那样的 table 的建议,那么也请分享。我只想让 R 也吐出 Latex 代码。

使用 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")

我们可以使用table(没有使用包)

tbl1 <- table(race.ethnicity)
stack(head(tbl1[order(-tbl1)], 2))

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

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

转换为 Latex

一个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"))

创建一个tablesort递减,获取head并创建一个'data.frame'。

table(race.ethnicity) |> sort(TRUE) |> head(2) |> data.frame()  #Using pipes (since 4.1.0)
#data.frame(head(sort(table(race.ethnicity), TRUE), 2))         #Traditional
#  race.ethnicity Freq
#1              F    2
#2              C    1