R 对两个不相同的向量进行相同排序
我有一个向量,如下所示:R 对两个不相同的向量进行相同排序,r,string,vector,syntax,R,String,Vector,Syntax,我有一个向量,如下所示: avector <- c("outcome", "city", "year", "as.factor(educ)", "age", "log(area)", "peopleinhouse") avector我认为您的方法很好,可以创建一个公式对象并使用all.vars。您可以使用match和order以与svector相同的
avector <- c("outcome", "city", "year", "as.factor(educ)", "age", "log(area)", "peopleinhouse")
avector我认为您的方法很好,可以创建一个公式对象并使用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)"
获取tmp
的另一种方法是使用regex并使用与上述相同的match
过程
tmp <- gsub('.*\\(|\\)', '', avector)
tmp谢谢你的回答。我想我可能无法正确地解释我想要什么(我将进行编辑)。或者你的答案有错。无论如何,想法是保持两个向量的原样(或恢复它们的原样),除了顺序。你需要在子集时更改最后一部分。请参阅更新的答案。
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)"
avector[match(svector, tmp)]
tmp <- gsub('.*\\(|\\)', '', avector)