Сортировать список, используя частичное совпадение с вектором (r) - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь изменить порядок элементов в списке на основе частичного совпадения со строковым вектором.Так что, если бы у меня был следующий список:

    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 Ответ

2 голосов
/ 01 мая 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...