2013-12-16 128 views
0

熊猫我有一个看起来像这样的文件:(注:我的实际文件有1000x5000尺寸,所以我做了这里一个短版)计算一致率在Python或R中

>duplicates 

markerid 1A 1B 2A 2B 3A 3B 
rs1512  CC CC CT CC CC TT 
rs1779  TT TG TG TT -- TG 
rs12743  TT TG TG TT TT TT 
rs13229  CC GC CC -- CC CC 
rs1328  CC CC GG GG CG CG 

第一列包含每个人都要测试的标记的ID。随后的列包含重复测试的个人。

例如1A和1B是样品1的重复。同样适用于2A和2B以及3A和3B。

我正在尝试获取每个样本的重复一致率。也就是说,我想知道样本1A的标记ID字母与样本1B相同的次数的比例,然后比较样本2A和2B并得到一致率等。

因此,例如,对于样本1A和1B,它们仅匹配4/5个标记符。

我想要生成有一个非常简单的格式的最终​​输出文件:

>concordance_rate 
concordance 
0.8 
0.2 
0.6 

其中第一行是样品1的一致率,第二行是样品2一致率等。

我在想这样做的方法是计算column2与colum3匹配的次数,然后除以任一列的长度,然后在后续两列的循环中进行循环在数据框中。但我真的被困在如何正确编写代码,所以我正在寻求帮助。我正在学习编程(在R中使用Python中的pandas模块),所以我们将非常感谢他们的帮助。谢谢。

回答

1

这将完成这项工作。请注意,我的数据与您的数据不完全相同,但1A和1B匹配3/5个案例,2A和2B匹配4/5个案例。

markers = data.frame(
"1A" = c("CC", "TT", "TT", "CC", "CC"), 
"1B" = c("CC", "TG", "TT", "CG", "CC"), 
"2A" = c("CC", "TT", "TT", "CC", "CC"), 
"2B" = c("CC", "TT", "TT", "CC", "CG"), 
stringsAsFactors = FALSE 
) 
# 
concordance = sapply(seq(1, ncol(markers), 2), function(c) { 
    match = sum(markers[, c] == markers[, c+1])/nrow(markers) 
}) 
print(concordance) 

输出是

> print(concordance) 
[1] 0.6 0.8 

这应该概括都有很好的更大的数据集。您可能想要放入一些逻辑来测试您的数据框是否有偶数列。

+0

谢谢。这工作 – CadisEtRama