Почему l oop, sub
векторизуется поверх x
.
samp <- sub("^[^_]*_(.*)_[^_]*$", "\\1", bamlist)
pat <- sub("(^[^_]+)_.*$", "\\1", samp)
samp
#[1] "C516_A1_B1" "C516_A1_G4" "C516_B1_G7" "C516_B1_G8"
#[5] "C516_B3_B1"
pat
#[1] "C516" "C516" "C516" "C516" "C516"
Data
bamlist <- scan(what = character(), text = "
EPICC_C516_A1_B1_S1-GRCh38.bam
EPICC_C516_A1_G4_S1-GRCh38.bam
EPICC_C516_B1_G7_S1-GRCh38.bam
EPICC_C516_B1_G8_S1-GRCh38.bam
EPICC_C516_B3_B1_S1-GRCh38.bam
")
Edit
Следуя за комментарием пользователя @ akrun, вот способ применить приведенный выше код к data.frame.
lapply(bamlist, function(y){
samp <- sub("^[^_]*_(.*)_[^_]*$", "\\1", y)
pat <- sub("(^[^_]+)_.*$", "\\1", samp)
data.frame(samp = samp, pat = pat)
})
#$X
# samp pat
#1 C516_A1_B1 C516
#2 C516_A1_G4 C516
#3 C516_B1_G7 C516
#4 C516_B1_G8 C516
#5 C516_B3_B1 C516
Теперь данные будут
X <- scan(what = character(), text = "
EPICC_C516_A1_B1_S1-GRCh38.bam
EPICC_C516_A1_G4_S1-GRCh38.bam
EPICC_C516_B1_G7_S1-GRCh38.bam
EPICC_C516_B1_G8_S1-GRCh38.bam
EPICC_C516_B3_B1_S1-GRCh38.bam
")
bamlist <- data.frame(X)