如何将字符变量的频率从最高到最低排序
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"))
创建一个table
,sort
递减,获取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
假设我的数据框 (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()
一个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"))
创建一个table
,sort
递减,获取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