Me gustaría dividir un objeto en R de acuerdo con los sufijos de los códigos de barras que contiene. Estos terminan en '-n' donde n es un número del 1 al 6. ej. AAACCGTGCCCTCA-1, GAACCGTGCCCTCA-2, CATGCGTGCCCTCA-5, etc. Me gustaría que toda la información correspondiente sobre cada código de barras se divida en consecuencia también. Aquí hay un código de ejemplo de un objeto, 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

¡Muchas gracias!

Abigail

1
Abigail575 13 feb. 2020 a las 19:08

2 respuestas

La mejor respuesta

La división no funciona porque necesita un subconjunto basado en las columnas. No estoy seguro de si hay un método dividido definido para esta clase. Puedes probar lo siguiente:

Primero para obtener algo como su ejemplo:

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

cds = load_HSMM()

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

dim(cds)
Features  Samples 
   47192      271

Y para crear un código de barras para cada muestra:

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"

Ahora obtenemos el grupo, que es el sufijo 1-6:

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

Para obtener un subconjunto, por ejemplo, esos "-1", simplemente puede hacer:

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"

Para obtener sus 6 grupos, puede hacer lo siguiente, ¡pero compruebe si su máquina tiene la memoria para acomodar esto!

subset_obj = lapply(unique(grp),function(i){
cds[,grp==i]
})
names(subset_obj) = unique(grp)
1
StupidWolf 13 feb. 2020 a las 22:17

Podemos usar sub para eliminar -\\d+ y dividir los 'cds' en función de eso

split(cds, sub("-\\d+$", "", cds$barcode))
1
akrun 13 feb. 2020 a las 16:09