对两个不同的向量进行相同的排序

时间:2020-07-27 08:18:25

标签: r string vector syntax

我有一个向量,如下所示:

avector <- c("outcome", "city", "year", "as.factor(educ)", "age", "log(area)", "peopleinhouse")

我有第二个向量,看起来像这样:

svector <- c("outcome", "educ", "city", "year", "age", "peopleinhouse", "area")

我正在寻找一段代码,该代码可以自动以相同的顺序获取它们。哪个顺序不重要。

编辑:请注意,除顺序外,解决方案应使向量保持完整。

显然,简单的排序是行不通的。我考虑过类似的东西:

test <- as.formula(paste(avector[1], paste(avector, collapse = " + "), sep = " ~ "))
all.vars(test)
sort(test)

然后按索引对旧向量应用相同的排序。但是我不知道该怎么办。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我认为您的方法很适合创建公式对象并使用all.vars。您可以使用matchorder使其与svector的顺序相同。

test <- as.formula(paste(avector[1],paste(avector,collapse = " + "), sep = " ~ "))
tmp <- all.vars(test)
avector[order(match(tmp, svector))]

#[1] "outcome" "as.factor(educ)" "city" "year" "age" "peopleinhouse" "log(area)"

如果svector的所有值都将出现在avector中,那么我们只能使用match

avector[match(svector, tmp)]

获取tmp的另一种方法是通过正则表达式并使用与上述相同的match过程。

tmp <- gsub('.*\\(|\\)', '', avector)