R: объединить два элемента вектора на основе шаблона - PullRequest
2 голосов
/ 31 января 2020

Я хотел бы знать, как я мог бы добавить функцию, например вставку, для объединения в строки, которые являются символами, вектора как один новый элемент нового вектора:

Так что моя проблема будет выглядеть как это:

a) Мои исходные данные хранятся в виде txt-файла

10_x_R1_001.fastq.gz
10_x_R2_001.fastq.gz

11_x_R1_001.fastq.gz
11_x_R2_001.fastq.gz

Эти данные я имею в качестве вектора данных, например

x= c("10_x_R1_001.fastq.gz", "10_x_R2_001.fastq.gz", "11_x_R1_001.fastq.gz", "11_x_R2_001.fastq.gz")

Так что мои Вопрос заключается в том, как я могу добавить элементы с запуском / содержать индикатор «10» или «11» в качестве нового элемента, чтобы результат выглядел следующим образом.

x= c("10_x_R1_001.fastq.gz 10_x_R2_001.fastq.gz", "11_x_R1_001.fastq.gz 11_x_R2_001.fastq.gz")

Поскольку эти два элемента всегда рядом друг с другом Я уже решил проблему с помощью rollapply пакета zoo , но я хотел бы знать, как я могу это сделать иначе.

Thx

1 Ответ

0 голосов
/ 31 января 2020

A base R подход заключается в подстроке первых 2 символов, используйте это в качестве переменной группировки в tapply и paste

unname(tapply(x, substring(x, 1, 2), FUN = paste, collapse= ' '))

Или, если числа могут быть разными и иметь переменное число цифры, затем используйте sub

unname(tapply(x, sub("_.*", "", x), FUN = paste, collapse= " "))
#[1] "10_x_R1_001.fastq.gz 10_x_R2_001.fastq.gz" "11_x_R1_001.fastq.gz 11_x_R2_001.fastq.gz"

Если значения всегда находятся рядом друг с другом, то используйте логический вектор рециркуляции для извлечения альтернативных элементов и paste вместе

paste(x[c(TRUE, FALSE)], x[c(FALSE, TRUE)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...