我有以下数据框:
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
我如何获得此结果?
预先感谢
答案 0 :(得分: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