【发布时间】:2021-11-09 06:53:17
【问题描述】:
我正在尝试使用dplyr 的arrange 根据条件对字符串进行排序。我想在一列上arrange,但如果第二列等于一个值,则按升序排列,如果第二列等于另一个值,则按降序排列。
我发现了几个类似的问题(其中一个是我自己以前的问题之一),但它们并不直接适用。它们都在数字列上排序,它们不适用于字符列。
R - Conditionally sort multiple columns as ascending or descending by group
Sort/arrange within group for only chosen groups
这里是示例数据:
df <- mtcars %>% as_tibble(rownames = "model") %>% select(model, mpg, cyl) %>% slice(1:8) %>% mutate(cond = c(rep("A", 4), rep("B", 4)))
如果 cond == "A",我想按升序对 "model" 进行排序。如果 cond == "B",我想按降序对 "model" 进行排序。我想要一个不依赖于bind_rows 或类似解决方案的解决方案。
可能是以下形式:
library(dplyr)
df %>% arrange(ifelse(cond == "A", model, desc(model)))
所需的解决方案如下所示:
## A tibble: 8 x 8
# model mpg cyl cond
# <chr> <dbl> <dbl> <chr>
#1 Datsun 710 22.8 4 A
#2 Hornet 4 Drive 21.4 6 A
#3 Mazda RX4 21 6 A
#4 Mazda RX4 Wag 21 6 A
#5 Valiant 18.1 6 B
#6 Merc 240D 24.4 4 B
#7 Hornet Sportabout 18.7 8 B
#8 Duster 360 14.3 8 B
【问题讨论】: