Подмножество фрейма данных по отдельным словам в имени столбца - PullRequest
1 голос
/ 26 мая 2020

Я новичок в stackoverflow и R в целом, поэтому я надеюсь, что не нарушу никакого этикета :) любят определять подмножества на основе слов, которые встречаются в именах столбцов.

gene.adk1 gene.adk2 gene.adk3 gene.bas1 gene.bas2   etc
1         2         1         4         6

Это всего лишь небольшой пример версии фрейма данных. Я хочу определить одно подмножество, содержащее только столбцы, в названии которых есть «adk», и другое подмножество столбцов, содержащих «bas» в заголовке.

Я отсортировал имена столбцов в алфавитном порядке и посмотрите на мой фрейм данных, чтобы узнать, сколько столбцов содержит "adk" в заголовке. Затем я определил подмножество с помощью функции подмножества:

adk <- subset.data.frame(expression, select = c(1:3))

Есть ли более элегантный способ сделать это? возможно, определение подмножеств одним словом, например «adk» в названии столбца?

Заранее спасибо

Marius

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Подмножество adk:

adk <- expression[grepl("\\.adk", names(expression)]

Подмножество bas:

bas <- expression[grepl("\\.bas", names(expression)]
1 голос
/ 26 мая 2020

Мы можем использовать grep для сопоставления подстроки 'adk', 'bas' в именах столбцов, чтобы выбрать эти столбцы

adkexprs <- expression[grep('adk', names(expression))]
basexprs <- expression[grep('bas', names(expression))]

Кроме того, чтобы сделать это более точным совпадением

adkexprs <- expression[grep('^gene\\.adk\\d+$', names(expression))]
basexprs <- expression[grep('^gene\\.bas\\d+$', names(expression))]

grep возвращает индекс numeri c, а grepl возвращает логический вектор. Это единственная разница

adkexprs <- expression[grepl('adk', names(expression))]
basexprs <- expression[grepl('bas', names(expression))]

Или с select от dplyr

library(dplyr)
adkexprs <- expression %>%
      select(matches('adk'))

basexprs <- expression %>%
      select(matches('bas'))
...