在 R 中拆分对象



我想根据它包含的条形码的后缀在R中拆分一个对象。它们以"-n"结尾,其中 n 是 1 到 6 之间的数字。例如AAACCGTGCCCTCA-1,GAACCGTGCCCTCA-2,CATGCGTGCCCTCA-5等。我希望有关每个条形码的所有相应信息也相应地拆分。下面是一个对象 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

非常感谢!

阿比盖尔

拆分不起作用,因为您需要根据列进行子集化。我不确定是否为此类定义了拆分方法。您可以尝试以下操作:

首先得到类似你的例子:

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"

要获得您的 6 组,您可以执行以下操作,但请检查您的机器是否有内存来容纳它!

subset_obj = lapply(unique(grp),function(i){
cds[,grp==i]
})
names(subset_obj) = unique(grp)

我们可以使用sub来删除-\d+并在此基础上拆分"cd">

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

最新更新