Упорядочить один вектор строк путем частичного совпадения другого - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть два вектора строк, и мне нужно упорядочить один вектор путем частичного совпадения другого. Векторы выглядят так:

enter image description here

Итак, мне нужно взять каждый элемент первого вектора и найти его положение в names, чтобы оба вектора были в одинаковом порядке. Например, GF1 должен быть 9th элементом в первом векторе. Я знаю, как заказать вещи, как только заказ будет известен. Я попробовал match функцию, но она не работает, возвращая меня NAs:

names_order <- match(paste0(samples$groups, samples$mouse), names)

Я также пытался pmatch, но безуспешно. Возможно, потому что match ищет полные совпадения. Grepl функция также не работает:

grep(paste0(paste0(samples$groups, samples$mouse), collapse = '|'), names, value = TRUE)

Возвращает только [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16, именно там находится совпадение без нужного мне порядка.

Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 06 ноября 2018

Вот один из способов использования grep и sapply:

samples$mouse[sapply(samples$groups, function(x) { grep(x, samples$mouse) })]

Функция grep base R не векторизована по отношению к первому параметру, поэтому мы не можем передать весь вектор groups. Вместо этого мы можем использовать sapply, чтобы найти индексы совпадений в векторе mouse путей.

...