提问人:littleworth 提问时间:9/7/2018 更新时间:9/7/2018 访问量:11638
如何使用 dplyr 管道根据向量对数据框的行进行排序
How to sort rows of a data frame based on a vector using dplyr pipe
问:
我有以下数据框:
library(tidyverse)
dat <- structure(list(var1 = c(1L, 2L, 2L, 3L, 1L), var2 = structure(c(10L,
1L, 8L, 3L, 5L), .Label = c("b", "c", "f", "h", "i", "o", "s",
"t", "w", "x"), class = "factor"), var3 = c(7L, 5L, 5L, 8L, 5L
), var4 = structure(c(8L, 5L, 1L, 4L, 7L), .Label = c("b", "c",
"d", "e", "f", "h", "i", "w", "y"), class = "factor")), .Names = c("var1",
"var2", "var3", "var4"), row.names = c(NA, 5L), class = "data.frame")
dat
#> var1 var2 var3 var4
#> 1 1 x 7 w
#> 2 2 b 5 f
#> 3 2 t 5 b
#> 4 3 f 8 e
#> 5 1 i 5 i
我想做的是对列进行排序/排列
基于预定义的顺序:var2
my_order <- c('t','f','x','b','i')
最终期望的结果是这样的:
var1 var2 var3 var4
2 t 5 b
3 f 8 e
1 x 7 w
2 b 5 f
1 i 5 i
我想在 dplyr 管道下进行。我怎样才能做到这一点?
我能做的充其量是这样的:
> dat %>%
+ arrange(var2)
var1 var2 var3 var4
1 2 t 5 b
2 3 f 8 e
3 1 x 7 w
4 2 b 5 f
5 1 i 5 i
答:
28赞
Ronak Shah
9/7/2018
#1
我们可以与arrange
match
library(dplyr)
dat %>%
arrange(match(var2, my_order))
# var1 var2 var3 var4
#1 2 t 5 b
#2 3 f 8 e
#3 1 x 7 w
#4 2 b 5 f
#5 1 i 5 i
5赞
akrun
9/7/2018
#2
我们可以将列转换为指定为“my_order”的列(但它不会更改实际列的类型)factor
levels
library(dplyr)
dat %>%
arrange(factor(var2, levels = my_order))
# var1 var2 var3 var4
#1 2 t 5 b
#2 3 f 8 e
#3 1 x 7 w
#4 2 b 5 f
#5 1 i 5 i
评论