Tengo casi 10 millones de SNP ubicados en 10 cromosomas. Quiero dividir el genoma en ventanas no superpuestas de 15, 20 y 30 kb. Aquí está parte de mi tabla SNP:
head (sap_ids) snp_id chr pos Chr01__15043 1 15043 Chr01__15079 1 15079 Chr01__15139 1 15139 Chr01__15165 1 15165 ... ... ... Chr17__214708424 17 214708424 Chr17__214708451 17 214708451 Chr17__214708484 17 214708484 Chr17__214708508 17 214708508 Chr17__214708574 17 214708574
He estado usando este código, pero me da una salida incorrecta porque cada cromosoma comienza en la posición 1
win_size<-c (15000,30000,50000,100000) res<- cbind (snp_ids, data.frame (lapply (setNames (win_size, paste ("ventana", win_size, sep = "_")), función (x) as.numeric (techo (snp_ids $ pos / x)))))
Por ejemplo, como puede ver en el siguiente ejemplo en la ventana 4, obtengo SNP de los cromosomas 1, 3 y 5:
snp_id chrome poistion windowChr01__58332 1 58332 4Chr01__58335 1 58335 4Chr01__58341 1 58341 4Chr01__58450 1 58450 4Chr01__58471 1 58471 4Chr01__58530 1 58530 4Chr01__58542 1 58542 4Chr01__58641 1 58641 4Chr03__45457 3 45457 4Chr03__45604 3 45604 4Chr04__56873 4 56873 4Chr04__57387 4 57387 4Chr04__57399 4 57399 4Chr04__57528 4 57528 4Chr04__58419 4 58419 4Chr04__59670 4 59670 4Chr04__59704 4 59 704 4
Supongo que la solución sería ejecutar el código anterior recorriendo cada cromosoma. Probé algo como esto:
for (i in 1:10) {res <- cbind (gatos, data.frame (lapply (setNames (win_size, paste ("ventana", win_size, sep = "_")), función (w)
paste (gatos $ chr [gatos $ chr == i], techo (gatos $ pos / w), sep = "_"))))}
Pero aún no funciona correctamente ( la columna 4 debe ser 1_1, para el chr 1)!
Chr01__912 1 912 2_1Chr01__944 1 944 2_1Chr01__1107 1 1107 2_1Chr01__1118 1 1118 2_1
¿Alguien puede ayudarme para averiguar cómo puedo modificar el código para crear estas ventanas que no se superponen correctamente.