如何在R中使用arrange()条件排序DataFrame,让Missing行始终位于末尾
让"Missing"始终位于表格末尾并按count降序排序
你可以在arrange()里加入两个排序条件:先按gender == "Missing"升序排列(让非Missing项排在前面),再按count降序排列。这样不管"Missing"的count值多大,都会固定在表格最后,其余类别则会根据count自动调整顺序。
修改后的完整代码:
gender <- data.frame(peopledata$`Gender`) %>% rename(`gender` = `peopledata.Gender`) %>% mutate(`gender` = replace_na(`gender`, "Missing")) %>% table() %>% as.data.frame() %>% rename(`count` = `Freq`) %>% arrange(gender == "Missing", desc(count))
用你提供的简化测试数据验证:
peopledata <- data.frame(gender = c("Missing", "Male", "Female", "Undisclosed"), count= c(293, 28, 14, 1)) # 直接对这个数据框排序的代码 peopledata %>% arrange(gender == "Missing", desc(count))
输出结果会是:
| gender | count |
|---|---|
| Male | 28 |
| Female | 14 |
| Undisclosed | 1 |
| Missing | 293 |
原理说明
gender == "Missing"会生成一个逻辑向量:非Missing项对应FALSE(数值0),Missing项对应TRUE(数值1)。arrange()默认按升序排列,所以0会排在1前面,也就是非Missing项全部在Missing之前。- 第二个条件
desc(count)会对非Missing的部分按count从大到小排序,确保这部分顺序会随数据更新自动调整。
这样就完全避免了用slice()固定索引的问题,不管后续数据怎么更新,Missing都会稳定在最后。
内容的提问来源于stack exchange,提问作者Mary Rachel
相关产品推荐
相关产品推荐

