我想从vcf文件中按照读入群体的顺序获取每个群体中的个体数量。我的文件的字段看起来像这样
class experimentalCell: BaseCellInAppStoreFolder {
lazy var familySharingView: UITextView = {
let tv = UITextView()
tv.text = "Family Sharing"
tv.textAlignment = .right
tv.backgroundColor = UIColor.green
tv.textContainer.maximumNumberOfLines = 1
tv.font = UIFont.systemFont(ofSize: 11)
let options = NSStringDrawingOptions.usesLineFragmentOrigin
let dummySize = CGSize(width: 1000, height: self.frame.height - 16)
let rect = tv.text?.boundingRect(with: dummySize, options: options, context: nil)
tv.textContainerInset = UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0)
return tv
}()
override func setupViews() {
super.setupViews()
addSubview(textView)
addConstraintsWithFormat("H:|[v0]|", views: textView)
addConstraintsWithFormat("V:|[v0]|", views: textView)
}
}
请参阅此处的示例文件vcf file
例如,在我链接到的文件中,我有两个人口,Chalifour 2003和Chalifour 2015.个人有一个前缀“CHALIFOUR_2003 ...”来识别这个。
我希望能够提取以下内容: Chalifour_2003 * 35 Chalifour 2015 * 45
“35”和“45”表示每个人口中的个体数量(虽然这些数字是由这些数字组成的)。我根本不关心输出的格式,我只需要数字,重要的是按照它们被读入文件的顺序列出种群。
对于试图获取此信息的途径的任何建议都将非常感激。
此致 艾拉
答案 0 :(得分:0)
使用data.table
包读取vcf文件,您可以执行以下操作:
library(data.table)
df <- fread("~/Downloads/ChaliNoOddsWithOuts.vcf")
samples <- colnames(df)[-c(1:9)]
table(gsub("(.*_.*)_.*","\\1", samples))
如果您不坚持使用R
,那么bash
中的一个班轮就可以完成工作
grep "#CHROM" file.vcf | tr "\t" "\n " | tail -n +10 | cut -f1,2 -d'_' | uniq -c