将空格分隔的文本文件转换为命名向量以计算HWE

问题描述 投票:3回答:2

我正在处理文本文件和矢量。

我有一个用以下格式隔开的文本文件:

id1 AA 44 AG 20 GG 36
id2 CC 30 CT 22 TT 48
id3 CT 60 CC 30 TT 10
...

并且我需要一个代码,该代码循环遍历每一行,并将id放入变量中,并将其余值放入向量中。与第一行相对应的向量示例:

x <- id1
y <- c(AA=40,AG=20,GG=36)

编辑:我需要使用HardyWeinberg package中的HWChisq函数来排除p值<0.001的SNP。功能需要每个等位基因的命名计数向量。

r bioinformatics genetics
2个回答
1
投票
逐行循环,然后应用HWE功能:

library("HardyWeinberg") # data df1 <- read.table(text = " id1 AA 44 AG 20 GG 36 id2 CC 30 CT 22 TT 48 id3 CT 60 CC 30 TT 10", header = FALSE, stringsAsFactors = FALSE) out <- apply(df1[, c(3, 5, 7)], 1, function(i){ x <- HWChisq(setNames(i, c("AA", "AB", "BB")), verbose = FALSE) x$pval }) # [1] 5.774374e-09 1.182236e-07 7.434226e-02

漂亮的输出:

cbind(df1, HWE = out) # V1 V2 V3 V4 V5 V6 V7 HWE # 1 id1 AA 44 AG 20 GG 36 5.774374e-09 # 2 id2 CC 30 CT 22 TT 48 1.182236e-07 # 3 id3 CT 60 CC 30 TT 10 7.434226e-02


要计算X染色体的HWE,请参见插图:

4. X-chromosomal tests for Hardy-Weinberg equilibrium

最近,Graffelman和Weir(2016)提出了针对HWE的X染色体上双等位基因标记的具体测试方法。这些测试同时考虑了男性和女性。 X染色体测试可以通过上一节中提到的相同功能(

HWChisq,HWLratioHWExactHWPerm)执行,并添加参数x.linked=TRUE到函数调用。


2
投票
[如果我们有备用列(假设我们有一个对象,则通过用.csv读取read.csv/read.table文件在R中创建了一个对象),然后用asplit按行拆分,但不包括第一列“ id”列,并创建一个setNames的向量

lst1 <- Map(setNames, asplit(df1[-1][c(FALSE, TRUE)], 1), asplit(df1[-1][c(TRUE, FALSE)], 1)) names(lst1) <- df1[[1]] lst1$id1 # AA AG GG # 44 20 36

数据

df1 <- structure(list(id = c("id1", "id2", "id3"), v1 = c("AA", "CC", "AA"), v2 = c(44L, 30L, 60L), v3 = c("AG", "CT", "AG"), v4 = c(20L, 22L, 30L), v5 = c("GG", "TT", "GG"), v6 = c(36L, 48L, 10L)), class = "data.frame", row.names = c(NA, -3L))

© www.soinside.com 2019 - 2024. All rights reserved.