Как сделать так, чтобы результаты списка подсчитанных значений становились такими же горячими, как функции данных - PullRequest
1 голос
/ 01 апреля 2019

У меня есть следующий фрейм данных:

v1        v2       v3
+         S10      tactagcaatacgcttgcgttcggtggttaagtatgtataatgcgcgggcttgtcgt
+        AMPC      tgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcatcgccaa
+        AROH      gtactagagaactagtgcattagcttatttttttgttatcatgctaaccacccggcg

Я выполняю преобразование v3, чтобы разделить строки на каждые 2 буквы и получить количество вхождений каждой пары букв, например:

lapply(df$v3, function(x) oligonucleotideFrequency(DNAString(x), width = 2))

это вывод этого преобразования для первой строки в v3:

AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT 
3  2  2  4  1  0  6  3  0  6  4  7  7  2  5  4 

Теперь у меня есть все значения счетчиков для каждой пары букв в строках v3, но каждыйСчетчик разделен и не предоставляет глобального значения.Теперь я хотел бы, чтобы каждая пара букв стала признаком фрейма данных, где значением каждого признака будет число вхождений каждой пары в одну и ту же строку.

это будеткак то так:

v1        v2     AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT 
+         S10     3  2  2  4  1  0  6  3  0  6  4  7  7  2  5  4                        
+        AMPC     3  4  1  4  5  2  4  4  2  4  1  5  3  5  6  3 
+        AROH     2  4  4  4  3  3  2  4  2  4  1  3  7  1  3  9

Как мне достичь этого результата?

Заранее спасибо

1 Ответ

1 голос
/ 01 апреля 2019

Раствор с использованием базы R.

library(Biostrings)

dat <- read.table(text = "v1        v2       v3
'+'         'S10'      'tactagcaatacgcttgcgttcggtggttaagtatgtataatgcgcgggcttgtcgt'
'+'        'AMPC'      'tgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcatcgccaa'
'+'        'AROH'      'gtactagagaactagtgcattagcttatttttttgttatcatgctaaccacccggcg'",
stringsAsFactors = FALSE, header = TRUE)

# Count the nucleotide number  
lst1 <- lapply(dat$v3, function(x) oligonucleotideFrequency(DNAString(x), width = 2))
# Transpose the vector and convert to a data frame for each element
lst2 <-  lapply(lst1, function(x) as.data.frame(t(x)))
# Comebine all single data frame into one data frame row-wise
dat2 <- do.call(rbind, lst2)
# Comebine with the original data frame column-wise
dat3 <- cbind(dat, dat2)
# Remvoe the v3 column
dat3$v3 <- NULL
dat3
#   v1   v2 AA AC AG AT CA CC CG CT GA GC GG GT TA TC TG TT
# 1  +  S10  3  2  2  4  1  0  6  3  0  6  4  7  7  2  5  4
# 2  + AMPC  3  4  1  4  5  2  4  4  2  4  1  5  3  5  6  3
# 3  + AROH  2  4  4  4  3  3  2  4  2  4  1  3  7  1  3  9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...