使用带有向量(r)的部分匹配对列表进行排序

时间:2019-04-30 22:05:38

标签: r list sorting vector

我试图基于与字符串向量的部分匹配对列表中的元素重新排序。因此,如果我有以下列表:

    myList = list(BvsAadditionalinfo, AvsAothertext,
 BvsBothertext, AvsBothertext, AvsBadditionalinfo,
 BvsAothertext, BvsBadditionalinfo, AvsAadditionalinfo)

还有这样的向量:

vsList = c("AvsA", "AvsB", "BvsA", "BvsB")

我可以对列表进行排序,以便最终得到:

    myList = list(AvsAothertext, AvsAadditionalinfo,
 AvsBothertext, AvsBadditionalinfo, BvsAothertext,
 BvsAadditionalinfo, BvsBothertext, BvsBadditionalinfo)

我已经尝试过使用order的用法:

TempFileList <- [order(match(myList, vsList))]

但这似乎不起作用,大概是因为匹配不是100%。如何告诉它接受部分匹配?

我的vsList也没有任何附件,因此我可以轻松地使用如下内容:

abbreviations = c("A", "B")

如果可行。

1 个答案:

答案 0 :(得分:2)

myList = list(BvsAadditionalinfo = 0, AvsAothertext = 0,
              BvsBothertext = 0, AvsBothertext = 0,
              AvsBadditionalinfo = 0, BvsAothertext = 0,
              BvsBadditionalinfo = 0, AvsAadditionalinfo = 0)

myList[order(-rowSums(sapply(seq_along(vsList), function(i)
    i * grepl(vsList[i], names(myList)))), names(myList), decreasing = TRUE)]
#$`AvsAothertext`
#[1] 0

#$AvsAadditionalinfo
#[1] 0

#$AvsBothertext
#[1] 0

#$AvsBadditionalinfo
#[1] 0

#$BvsAothertext
#[1] 0

#$BvsAadditionalinfo
#[1] 0

#$BvsBothertext
#[1] 0

#$BvsBadditionalinfo
#[1] 0