R.字母组合

时间:2013-10-25 14:56:04

标签: r combinations

我应该有这样的输出:

AAAA
AAAG
AAAC
AAAT
AAGA
AAGG
...

我想先用数字做这个,将“A”表示为1,将“G”表示为2,等等......

1111
1112
...

后来将1转换为“A”,依此类推。我找到了这个函数expand.grid,但这给了我一个包含4个变量(4列)的数据框,每个变量都有一个数字。

你还有其他想法吗?

提前致谢。

3 个答案:

答案 0 :(得分:9)

编辑:我的原始答案错误地认为您已经拥有索引向量。要从头开始生成这些字母的所有可能组合的向量,请尝试以下方法:

x <- expand.grid(rep(list(c('A', 'G', 'T', 'C')), 4))
do.call(paste0, x)

您可以使用chartr执行此操作。

x <- c(1111, 1112, 1113, 1114, 1121)
chartr('1234', 'AGCT', x)
# [1] "AAAA" "AAAG" "AAAC" "AAAT" "AAGA"

答案 1 :(得分:0)

如果我理解正确,您可以获得所有组合,只有数字被分成不同的列。你想要什么输出?如果你想输出到一个文件,你不能只做这样的事情:

sink(SOME_FILENAME)

for(i in 1:nrow(YOUR_DATAFRAME))
{
    for(j in 1:ncol(YOUR_DATAFRAME))
    {
        print(YOUR_DATAFRAME[i,j])
    }

    print("\n")
}

答案 2 :(得分:0)

在意识到你只想要一个4元素组合/ AGCT排列的完整“套牌”之后(而不是将字母翻译成字母,我认为这比expand.grid方法要快得多:

levs <- paste0( gl(4, 4^3, 4^4, labels=c("A","G","C","T") ), 
                gl(4, 4^2, 4^4, labels=c("A","G","C","T")),
                gl(4, 4,   4^4, labels=c("A","G","C","T")), 
                gl(4, 1,   4^4, labels=c("A","G","C","T")) )

head(levs)
[1] "AAAA" "AAAG" "AAAC" "AAAT" "AAGA" "AAGG"