您好Stackoverflow社区,
背景 我正在使用人口建模程序,在一系列管理方案的情况下,尝试预测受威胁物种种群的遗传结果。在我的每个人口建模场景结束时,我有一个.csv文件,其中包含所有1000个模拟人口迭代中所有最终生存个体的信息,其中包括所有幸存个体基因型的信息。
我想要的是什么:
从这个.csv输出文件中,我想确定文件中包含的模型的1000次迭代中每列"6"
和"Allele2a"
中等位基因"Allele2b"
的频率。
问题: 我试图确定等位基因6频率的.csv文件不包含可用于轻松将数据(从可以看到的内容)子集化到单独迭代中的信息。我不知道如何将这个数据集拆分成它的相应迭代,因为存活到模型末尾的个体数量(以及随后每次迭代中单个行的数量)不一样,并且没有明确的子集化点
关于如何将这些数据分成可以分析的迭代单元,或者如何在没有复杂子集的情况下确定等位基因频率的任何指导将非常受欢迎。如果需要任何进一步的信息,请不要犹豫。
谢谢!
编辑:当输入R时,数据如下所示:
Living<-read.csv("Living Ind.csv", header=F)
colnames(Living) <- c("Iteration","ID","Pop","Sex","alive","Age","DamID","SireID","F","FInd","MtDNA","Alle1a","Alle1b","Alle2a","Alle2b")
attach(Living)
Living
Iteration ID Pop Sex alive Age DamID SireID F FInd MtDNA Alle1a Alle1b Alle2a Alle2b
1 Iteration 1 NA NA NA NA NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA NA NA NA NA NA
3 2511 2 M TRUE 19 545 1376 0.000 0.000 545 1089 2751 6 6
4 2515 2 F TRUE 18 590 1783 0.000 0.000 590 1180 3566 5 5
5 2519 2 F TRUE 18 717 1681 0.000 0.000 717 1434 3362 4 6
6 2526 2 M TRUE 17 412 1780 0.000 0.000 412 823 3559 4 6
7 2529 2 F TRUE 17 324 1473 0.000 0.000 324 647 2945 5 6
107 2676 2 F TRUE 1 2576 2526 0.000 0.000 621 3876 3559 6 4
108 NA NA NA NA NA NA NA NA NA NA NA NA NA
109 Iteration 2 NA NA NA NA NA NA NA NA NA NA NA NA
110 NA NA NA NA NA NA NA NA NA NA NA NA NA
111 2560 2 M TRUE 18 703 1799 0.000 0.000 703 1406 3598 6 6
112 2564 2 M TRUE 18 420 1778 0.000 0.000 420 840 3555 4 6
113 2578 2 F TRUE 17 347 1778 0.000 0.000 347 693 3555 3 5
114 2581 2 M TRUE 16 330 1454 0.000 0.000 330 659 2907 6 6
115 2584 2 F TRUE 16 568 1593 0.000 0.000 568 1135 3185 6 5
116 2591 2 F TRUE 13 318 1423 0.000 0.000 318 635 2846 3 6
117 2593 2 M TRUE 13 341 1454 0.000 0.000 341 682 2907 6 6
118 2610 2 M TRUE 8 2578 2582 0.000 0.000 347 693 2908 5 6
119 2612 2 M TRUE 8 2578 2582 0.000 0.000 347 3555 660 3 6
我害怕这一团糟。
这是指向.csv文件副本的链接。 https://www.dropbox.com/s/pl6ncy5i0152uv1/Living%20Ind.csv?dl=0
答案 0 :(得分:0)
感谢您提供数据。它使更多更容易。将来你应该总是在SO上提出问题。
基本问题是将原始数据转换为更易于在R中操作的内容。由于您的数据集非常大,我使用data.table
包,但您基本上也可以使用基础R中的data.frames同样的事情。
library(data.table)
url <- "https://www.dropbox.com/s/pl6ncy5i0152uv1/Living%20Ind.csv?dl=1"
DT <- fread(url,header=FALSE, showProgress = FALSE) # import data
DT <- DT[!is.na(V2)] # remove blank lines (rows)
brks <- which(DT$V1=="Iteration") # identify iteration header rows
iter <- DT[brks,]$V2 # extract iteration numbers
DT <- DT[-brks,Iter:=rep(iter,diff(c(brks,nrow(DT)+1))-1)] # assign iteration number to each row
DT <- DT[-brks] # remove iteration header rows
DT[,V1:=NULL] # remove first column
setnames(DT, c("ID","Pop","Sex","alive","Age","DamID","SireID","F","FInd","MtDNA","Alle1a","Alle1b","Alle2a","Alle2b","Iteration"))
# now can count fraction of allele 6 easily.
DT[,list(frac=sum(Alle2a==6 | Alle2b==6)/.N), by=Iteration]
# Iteration frac
# 1: 1 0.7619048
# 2: 2 0.9130435
# 3: 3 0.6091954
# 4: 4 0.8620690
# 5: 5 0.8850575
# ---
如果你要分析这样的大型数据集,那么学习如何使用data.table
可能是值得的。