用于从数据框中生成所述组合的相对丰度的所有可能组合
All possible combinations used to generate relative abundances of said combinations from dataframe
我正在尝试在 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)
这段代码就是这样做的,但我还有一个 dataframe/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)的比例 vector/list/array。
我在 R(而不是 python)中这样做的原因是我想稍后与其他因素进行一些交互(R 更适合)
很抱歉这个问题不太清楚,我发现很难解释,如果我能更清楚一点,请告诉我,谢谢!
如果你这样做会怎样:
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
Edit/explanation.
我在这里RelativeTable[, names(RelativeTable) %in% Scombi]
所做的基本上是两件事。
- 我使用
%in%
告诉我 x 中的值是否在 y 中。函数returns是TRUE/FALSE的一个逻辑向量,我们可以用它来查看RelativeTable中出现的氨基酸的哪些组合在组合向量中。
此外,函数 names()
为我们提供了列的名称。
因此,names(RelativeTable) %in% Scombi
(您可以 运行 只是这个语句)将为我们提供一个逻辑向量,并告诉我们是否有 Scombi 中相对 table 中的名称。
- 我们可以使用逻辑向量作为索引。这意味着,与
RelativeTable[, 1]
相同的想法会给我们第一列,而 RelativeTable[, c(1,3)]
会给我们第 1 列和第 3 列,RelativeTable[ names(RelativeTable) %in% Scombi] 只给我们 "TRUE" 列 - 这意味着我们想要的列。
我正在尝试在 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)
这段代码就是这样做的,但我还有一个 dataframe/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)的比例 vector/list/array。
我在 R(而不是 python)中这样做的原因是我想稍后与其他因素进行一些交互(R 更适合)
很抱歉这个问题不太清楚,我发现很难解释,如果我能更清楚一点,请告诉我,谢谢!
如果你这样做会怎样:
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
Edit/explanation.
我在这里RelativeTable[, names(RelativeTable) %in% Scombi]
所做的基本上是两件事。
- 我使用
%in%
告诉我 x 中的值是否在 y 中。函数returns是TRUE/FALSE的一个逻辑向量,我们可以用它来查看RelativeTable中出现的氨基酸的哪些组合在组合向量中。 此外,函数names()
为我们提供了列的名称。 因此,names(RelativeTable) %in% Scombi
(您可以 运行 只是这个语句)将为我们提供一个逻辑向量,并告诉我们是否有 Scombi 中相对 table 中的名称。 - 我们可以使用逻辑向量作为索引。这意味着,与
RelativeTable[, 1]
相同的想法会给我们第一列,而RelativeTable[, c(1,3)]
会给我们第 1 列和第 3 列,RelativeTable[ names(RelativeTable) %in% Scombi] 只给我们 "TRUE" 列 - 这意味着我们想要的列。