如何使用 dplyr 中的 match 根据外部向量对列进行排序?

ice*_*fee 0 r dplyr

我有一个数据框 df:

df <- data.frame(a = c("b2","d2","a1","c1"), b = c(12, 3, 54, 4))
> df
   a  b
1 b2 12
2 d2  3
3 a1 54
4 c1  4
Run Code Online (Sandbox Code Playgroud)

和一个外部向量,我希望其顺序a匹配:

vec <- c("a1","b2","c1","d2")
Run Code Online (Sandbox Code Playgroud)

通常我可以使用以下方法执行此操作match

df <- df[match(vec, df$a),]

> df
   a  b
3 a1 54
1 b2 12
4 c1  4
2 d2  3
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有办法在 dplyr 中做到这一点。我尝试过以下方法,但没有成功:

df <- df %>%
    mutate(
        a = match(vec, a)
    )
> df
  a  b
1 3 12
2 1  3
3 4 54
4 2  4
Run Code Online (Sandbox Code Playgroud)

谁能建议我的代码哪里出错了?

Ani*_*yal 5

您仅在 baseR 中排序,因此等效dplyr语法将是。此外,您必须反转 的参数,match因为这里我们希望将 df 的列索引放入向量中vec

df %>% arrange(match(a, vec))
   a  b
1 a1 54
2 b2 12
3 c1  4
4 d2  3
Run Code Online (Sandbox Code Playgroud)