【发布时间】:2018-09-07 20:29:04
【问题描述】:
我有以下数据框:
genus_sub <- structure(list(GutREF001.1_MDA_1 = c(0, 1, 0, 0, 0, 0, 0, 0,
0, 0), GutREF001.1_MDA_2 = c(0, 1, 0, 0, 0, 0, 0, 0, 0, 0), GutREF001.1_MDA_3 = c(0,
1, 0, 0, 0, 0, 0, 0, 0, 0), GutREF001.2_MDA_1 = c(0, 1, 0, 0,
0, 0, 0, 0, 0, 0), GutREF001.2_MDA_2 = c(0, 1, 0, 0, 0, 0, 0,
0, 0, 0), GutREF001.2_MDA_3 = c(0, 1, 0, 0, 0, 0, 0, 0, 0, 0),
ID = c("Enterococcaceae (B; Firm)", "Oscillospiraceae (B; Firm)",
"Enterobacteriaceae (B; Prot)", "Helicobacteraceae (B; Prot)",
"Peptoniphilaceae (B; Firm)", "Flavobacteriaceae (B; Bact)",
"Methanobacteriaceae (A; Eury)", "Coriobacteriaceae (B; Acti)",
"Micrococcaceae (B; Acti)", "Lactobacillaceae (B; Firm)")), .Names = c("GutREF001.1_MDA_1",
"GutREF001.1_MDA_2", "GutREF001.1_MDA_3", "GutREF001.2_MDA_1",
"GutREF001.2_MDA_2", "GutREF001.2_MDA_3", "ID"), row.names = c("Enterococcaceae (B; Firm)",
"Oscillospiraceae (B; Firm)", "Enterobacteriaceae (B; Prot)",
"Helicobacteraceae (B; Prot)", "Peptoniphilaceae (B; Firm)",
"Flavobacteriaceae (B; Bact)", "Methanobacteriaceae (A; Eury)",
"Coriobacteriaceae (B; Acti)", "Micrococcaceae (B; Acti)", "Lactobacillaceae (B; Firm)"
), class = "data.frame")
由 MDA_1、MDA_2 和 MDA_3 分隔的相同列名是一式三份(技术重复样本)分析需要一次在三个这样的相同样本之间进行
我想计算:
我。共识 - 即对于每一行,确定 50% 的样本中存在的 ID(值 == 1)或在这种情况下至少三分之二
二。 Sample_consensus_detected - 从上面确定的共识集中,找出一式三份的单个样本中存在的 ID 数
三。 Sample_consensus_not_detected - 从上面确定的共识集中,找出三份的单个样本中不存在的 ID 数量
四。 Replicate_not_in_consensus - 存在于单个样本中但不存在于共识中
四。 summary_metric_1 - (ii / (ii + iii))
v. summary_metric_2 = (iv / (ii + iv))
我编写了以下代码来开始汇总三组:
row.names(genus_sub) <- genus_table$ID
genus_sub$ID <- NULL
genus_sub %>%
gather(key, value) %>%
extract(key, c("sample_id", "rep"), "([[:alnum:]]+)_MDA_([[:alnum:]]+)") %>%
group_by(sample_id) %>%
summarize(sample_sum = sum(value))
但无法确定一种计算一致性的方法,即在三列中的两列中存在 ID 的行的总和值 (==1)。任何帮助表示赞赏。预期输出如下:
【问题讨论】:
-
您能否向我们展示您想要的输出,以便您的目标更加清晰?
-
嗨,我已对问题进行了编辑以显示预期结果