【问题标题】:All possible combinations used to generate relative abundances of said combinations from dataframe用于从数据帧生成所述组合的相对丰度的所有可能组合
【发布时间】:2018-05-11 09:10:16
【问题描述】:

我正在尝试在 R 中创建一个循环,该循环计算所有 20 个氨基酸的所有可能组合,而不会在最长 20 个字符的字符串中重复:

S <- c('G','A','L','M','F','W','K','Q','E','S','P','V','I','C','Y','H','R','N','D','T')



allCombs <- function(x) c(x, lapply(seq_along(x)[-1L], 
                                    function(y) combn(x, y, paste0, collapse = "")),
                          recursive = TRUE)
fu <- allCombs(S) 

此代码执行此操作,但我也有一个数据框/csv,其中包含 1000 个不同物种的氨基酸的相对比例,例如:

Species    G   A   L  ...
Species 1  0.1  0.2  0.4
Species 2  0.1  0.02 0.2
Species 3  0.0  0.09 0.01

我要做的是计算每种不同氨基酸组合(G、A、L 等)在整体中的比例,即 1,作为向量/列表/数组。

我在 R(而不是 python)中这样做的原因是因为我想稍后与其他因素进行一些交互(R 更适合)

抱歉,我发现这很难解释,如果我能更清楚,请告诉我,谢谢!

【问题讨论】:

  • 我不明白你想做什么。 1. 你有所有的组合。 2. 你有一张表格,你知道每个物种的氨基酸相对比例是多少。例如一个有 0.1 的 G 和 0.2 的 A 等等。 3. 你现在想做什么?
  • 我正在尝试将两者结合起来,本质上是将不同的组合添加到不同的比例中,所以 A 为 0.1,然后 A,G 为 0.12...一直到 20(这将是 1) 对于每个物种
  • 能否提供一些样本数据?
  • 所以,物种 1:A 的比例 = AG 的 0.1 个支柱 = AY 的 0.12 个支柱 = 0.123 ..通过每个物种的所有 1000 万个组合(最多 20 个氨基酸)
  • 应变,A,C,D,E,F,G,H,I,K,L,M,N,P,Q,R,S,T,V,W,Y Acaryochloris_marina_MBIC11017 ,8.63062804444194,2.51578453080204 1.20840792853488,5.1143291659966,5.70785002025175,3.47713995654374,7.19560864242886,2.18859035671376,6.67322000435096,4.21289868571883,11.7838509608676,2.30073830422317,3.24240318700859,5.06112649794611,5.16408509869107,4.88272286226009,5.82097877539072 7.70587135328063,1.21972869688864,2.51578453080204,跨度>

标签: r loops vector bioinformatics combinatorics


【解决方案1】:

如果你会这样做:

require(tidyverse)

您的脚本,创建所有组合:

S <- c('G','A','L','M','F','W','K','Q','E','S','P','V','I','C','Y','H','R','N','D','T')

allCombs <- function(x) c(x, lapply(seq_along(x)[-1L], 
                                    function(y) combn(x, y, paste0, collapse = "")),
                          recursive = TRUE)
Scombi <- allCombs(S)

创建样本数据:

set.seed(123)
RelativeTable <- data.frame(replicate(length(allCombs(LETTERS[1:5])), sample(0:1,4,rep=TRUE))) %>% 
  purrr::set_names(allCombs(LETTERS[1:5]))

RelativeTable

  A B C D E AB AC AD AE BC BD BE CD CE DE ABC ABD ABE ACD ACE ADE BCD BCE BDE CDE ABCD ABCE ABDE ACDE BCDE ABCDE
1 0 1 1 1 0  1  1  0  1  1  0  0  0  1  0   1   1   1   1   0   0   0   1   0   1    1    0    0    0    1     1
2 1 0 0 1 0  1  1  0  1  0  0  0  1  0  1   0   0   0   0   1   1   0   0   1   0    0    1    0    1    1     0
3 0 1 1 0 0  1  1  1  0  0  0  0  0  1  1   0   1   1   0   0   0   1   0   0   0    0    1    1    1    1     0
4 1 1 0 1 1  1  1  1  0  0  0  0  0  0  0   0   1   1   0   0   1   1   1   0   1    1    1    0    0    0     0

仅从RelativeTable 中选择我们在Scombi 中也有的组合

RelativeTable[, names(RelativeTable) %in%  Scombi]

结果:

 A C D E AC AD AE CD ACD
1 0 1 1 0  1  0  1  0   1
2 1 0 1 0  1  0  1  1   0
3 0 1 0 0  1  1  0  0   0
4 1 0 1 1  1  1  0  0   0

编辑/解释。

我在这里RelativeTable[, names(RelativeTable) %in% Scombi] 所做的基本上是两件事。

  1. 我使用%in% 告诉我x 中的值是否在y 中。该函数返回一个TRUE/FALSE的逻辑向量,我们可以通过它来查看RelativeTable中出现的氨基酸组合在组合向量中。 此外,函数names() 为我们提供了列的名称。 所以,names(RelativeTable) %in% Scombi(你可以只运行这个语句)会给我们一个逻辑向量,并告诉我们是否在 Scombi 中的相对表中有名称。
  2. 我们可以使用逻辑向量作为索引。这意味着,与RelativeTable[, 1] 相同的想法会给我们第一列,RelativeTable[, c(1,3)] 会给我们第一列和第三列,RelativeTable[, names(RelativeTable) %in% Scombi] 只给我们“TRUE”列 -这意味着我们想要的列。

【讨论】:

  • 是的,看起来真的很有用!我会试一试的!
  • 我对 R 的新手证明太多了,我将如何用我导入的数据帧中的值填充表?
  • 恐怕每次我尝试使用我的数据时它都会崩溃,有 1000 万种氨基酸组合,我的数据框有 1000 种不同的物种,我认为它对 R 来说太过分了...
  • 我自己没试过,但是你熟悉python但还是想用R的某些部分,试试这个:github.com/rstudio/reticulate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2016-01-07
  • 2016-08-16
相关资源
最近更新 更多