#r #function #dataframe
#r #функция #фрейм данных
Вопрос:
У меня есть следующий фрейм данных:
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:
Решение, использующее базу 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
Комментарии:
1. черт возьми, www, это потрясающе!! Я у тебя в долгу, еще раз спасибо!! Не могли бы вы просто немного объяснить, что делает часть кода, содержащая список?? ради обучения, пожалуйста
2. @Miguel2488 Я предоставил некоторые пояснения. Спасибо.