如何使用dplyr
根据多列的降序值为每个列创建排名?下面的代码似乎没有考虑arrange_at
中的desc
参数。
rank_f <- function(ds, cols, fs){
ds %>%arrange_at(desc(vars(!!!cols)))%>%
mutate_at(vars(!!!cols), funs(!!!fs))
}
USArrests %>%tibble::rownames_to_column()%>%
rank_f(quos((Murder:Rape)),quos(min_rank))->ranked
head(USArrests)
# Murder Assault UrbanPop Rape
# Alabama 13.2 236 58 21.2
# Alaska 10.0 263 48 44.5
# Arizona 8.1 294 80 31.0
# Arkansas 8.8 190 50 19.5
# California 9.0 276 91 40.6
# Colorado 7.9 204 78 38.7
head(ranked)
# rowname Murder Assault UrbanPop Rape
# 1 Alabama 44 35 16 29
# 2 Alaska 35 43 7 49
# 3 Arizona 29 47 39 43
# 4 Arkansas 31 31 9 24
# 5 California 32 44 50 48
# 6 Colorado 28 33 38 47
速率越高,排名应该越低,但事实并非如此。