我想根据它包含的条形码的后缀在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))