我正在根据性别数据构建一个表格,其中包含三个分类值和大量缺失数据。我将 NA 转换为“缺失”以创建第四个分类值。我想排列表格,以便将类别从最大到最小值排序,“缺失”类别始终位于底部。
但是,由于该表将从定期更新的数据集提供数据,因此基于其值的类别顺序可能会发生变化,并且我总是希望首先显示具有最大值的非缺失数据类别,然后显示缺失类别永远是最后一个。这使得使用
slice()
函数按索引号排列不可行。
下面的代码生成一个总结分类值的数据框,“Missing”位于顶部,因为它默认是最大的类别:
gender<-data.frame(peopledata$`Gender`)%>%
rename(`gender`=`peopledata.Gender`)%>%
mutate(`gender`= replace_na(`gender`,"Missing"))%>%
table()%>%
as.data.frame()%>%
rename(`count`=`Freq`)%>%
arrange(desc(`count`))
------------------------------------------------- --------------------------------------------------------------------------
输出:
性别 | 数 |
---|---|
失踪了 | 293 |
男 | 28 |
女 | 14 |
未公开 | 1 |
------------------------------------------------- --------------------------------------------------------------------------
输入数据(为了简单起见,从性别数据中复制汇总表):
peopledata<-data.frame(gender = c("Missing", "Male", "Female", "Undisclosed, ), count= c(293, 28, 14, 1))
------------------------------------------------- --------------------------------------------------------------------------
我的问题集中在
arrange(desc(`count`))
行,以及如何更改它,使“失踪”行始终位于底部,并按“人数”列对其余行进行排序。是否有一个条件调用,我可以将其输入到range()中以促进这一点?
按
Missing
排序后,您可以移动count
行。
library(dplyr)
peopledata |>
arrange(desc(count)) |>
slice(order(gender == 'Missing'))
#> gender count
#> 1 Male 28
#> 2 Female 14
#> 3 Undisclosed 1
#> 4 Missing 293
创建于 2024-07-30,使用 reprex v2.1.0
library(dplyr)
library(forcats)
peopledata |>
arrange(fct_reorder(gender, count, .desc = T) |> fct_relevel("Missing", after = Inf))
# gender count
# 1 Male 28
# 2 Female 14
# 3 Undisclosed 1
# 4 Missing 293