Расщепление объекта в R - PullRequest
       5

Расщепление объекта в R

1 голос
/ 13 февраля 2020

Я хотел бы разделить объект в R в соответствии с суффиксами штрих-кодов, которые он содержит. Они заканчиваются на '-n', где n - число от 1 до 6. Например, AAACCGTGCCCTCA-1, GAACCGTGCCCTCA-2, CATGCGTGCCCTCA-5 и др. c. Я хотел бы, чтобы вся соответствующая информация о каждом штрих-коде была соответственно разделена. Вот пример кода объекта, cds.

class(cds)
[1] "CellDataSet"
attr(,"package")
[1] "monocle"

split(cds, cds$barcode)
#not by individual barcodes, but by groups of those ending '-1', '-2',...,'-6'. So 6 new objects in total

Большое спасибо!

Абигайль

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

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

Сначала получите что-то похожее на ваш пример:

library(monocle)
library(HSMMSingleCell)
library(Biostrings)

cds = load_HSMM()

class(cds)
[1] "CellDataSet"
attr(,"package")
[1] "monocle"

dim(cds)
Features  Samples 
   47192      271

И создайте штрих-код для каждого образца:

bar = paste(names(oligonucleotideFrequency(DNAString("NNNNN"),5))[1:ncol(cds)],
sample(1:6,ncol(cds),replace=TRUE),sep="-")

head(bar)
[1] "AAAAA-3" "AAAAC-6" "AAAAG-5" "AAAAT-1" "AAACA-5" "AAACC-5"

Теперь мы получаем группа, которая является суффиксом 1-6:

cds$barcodes= bar
grp = sub("[A-Z]*[-]","",cds$barcodes)

Чтобы получить одно подмножество, например, те, которые будут "-1", вы можете просто сделать:

group1 = cds[,grp==1]
dim(group1)
Features  Samples 
   47192       46 
head(group1$barcodes)
[1] "AAAAT-1" "AACGA-1" "AAGCG-1" "AAGGG-1" "AAGTA-1" "AATAG-1"

To получить 6 групп, вы можете сделать следующее, но проверьте, есть ли на вашем компьютере памяти для этого!

subset_obj = lapply(unique(grp),function(i){
cds[,grp==i]
})
names(subset_obj) = unique(grp)
1 голос
/ 13 февраля 2020

Мы можем использовать sub, чтобы удалить -\\d+ и разделить 'CD' на основе этого

split(cds, sub("-\\d+$", "", cds$barcode))
...