我有一个向量,如下所示:
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)
然后按索引对旧向量应用相同的排序。但是我不知道该怎么办。
有什么想法吗?
答案 0 :(得分:2)
我认为您的方法很适合创建公式对象并使用all.vars
。您可以使用match
和order
使其与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)