R中的四配子试验
我有(将有)数据,如下所示:R中的四配子试验,r,compare,dna-sequence,R,Compare,Dna Sequence,我有(将有)数据,如下所示: Individual Nuk Name Position Individual.1 Nuk.1 Name.1 Position.1 Ind 1 A Locus_1988 23 Ind 1 A Locus_3333 15 Ind 2 A Locus_1988 23 Ind 2 G Locus_3333 15 Ind 3 G Locus_19
Individual Nuk Name Position Individual.1 Nuk.1 Name.1 Position.1
Ind 1 A Locus_1988 23 Ind 1 A Locus_3333 15
Ind 2 A Locus_1988 23 Ind 2 G Locus_3333 15
Ind 3 G Locus_1988 23 Ind 3 A Locus_3333 15
Ind 4 G Locus_1988 23 Ind 4 - Locus_3333 15
Ind 5 A Locus_1988 23 Ind 5 G Locus_3333 15
Ind 6 G Locus_1988 23 Ind 6 G Locus_3333 15
Ind 1 C Locus_1988 23 Ind 1 C Locus_3333 18
Ind 2 T Locus_1988 23 Ind 2 C Locus_3333 18
Ind 3 T Locus_1988 23 Ind 3 T Locus_3333 18
Ind 4 C Locus_1988 23 Ind 4 - Locus_3333 18
Ind 5 - Locus_1988 23 Ind 5 C Locus_3333 18
Ind 6 T Locus_1988 23 Ind 6 T Locus_3333 18
Ind 1 T Locus_2301 12 Ind 1 T Locus_4123 38
Ind 2 T Locus_2301 12 Ind 2 T Locus_4123 38
Ind 3 A Locus_2301 12 Ind 3 - Locus_4123 38
Ind 4 - Locus_2301 12 Ind 4 A Locus_4123 38
Ind 5 A Locus_2301 12 Ind 5 A Locus_4123 38
Ind 6 T Locus_2301 12 Ind 6 T Locus_4123 38
Ind 1 G Locus_2301 31 Ind 1 G Locus_4123 52
Ind 2 C Locus_2301 31 Ind 2 C Locus_4123 52
Ind 3 C Locus_2301 31 Ind 3 G Locus_4123 52
Ind 4 G Locus_2301 31 Ind 4 C Locus_4123 52
Ind 5 - Locus_2301 31 Ind 5 C Locus_4123 52
Ind 6 G Locus_2301 31 Ind 6 - Locus_4123 52
数据以成对基因座的形式建立(因此,在上面的例子中,基因座_1988和基因座_3333是一对)。对于一对中的每个位置,我需要在Nuk上做一个四配子测试(FGT),即测试四个可能的字母GCAT中任何给定的两个字母组合的所有可能的两对组合。
因此,对于上述数据,对于成对的轨迹_1988位置23+轨迹_3333位置15
存在的组合为AA-AG-GA-G-AG-GG
。由于存在AA、AG、GA和GG组合,这对组合将通过FGT),需要注册(即在新的_列中使用1)。
上述数据中的下一组是lock_1988位置23+lock_3333
位置18具有以下组合:CC-TC-TT--C-TT
。由于缺少组合CT,该组将无法通过FGT(在新的_列中注册为0)
您将如何进行此测试
有许多基因座,每个基因座上有许多(30)个个体,在一些(但不是所有)基因座中有几个位置需要测试
我认为,应该可以按照以下思路构建测试:
if(grepl(“AG”和“GA”和“AA”和“GG”和“AC”和“CA”和“AA”和“CC”和“AT”和“TA”和“AA”和“TT”和“CT”和“TC”和“CC”和“GC”和“CC”和“GG”和“GT”和“TG”和“GG”和“TT”,数据”两列的组合)打印(“1”)其他打印(“0”)
但我显然不允许使用&|运算符。
同时,我也很难弄清楚如何指定,首先是名称,其次是位置。
您是否会在新列中为每个组指定一个唯一的名称(如下所示),并指定对每个组执行测试
Individual Nuk Name Pos Individual.1 Nuk.1 Name.1 Pos.1 Grp
Ind 1 A Locus_1988 23 Ind 1 A Locus_3333 15 1
Ind 2 A Locus_1988 23 Ind 2 G Locus_3333 15 1
Ind 3 G Locus_1988 23 Ind 3 A Locus_3333 15 1
Ind 4 G Locus_1988 23 Ind 4 - Locus_3333 15 1
Ind 5 A Locus_1988 23 Ind 5 G Locus_3333 15 1
Ind 6 G Locus_1988 23 Ind 6 G Locus_3333 15 1
Ind 1 C Locus_1988 23 Ind 1 C Locus_3333 18 2
Ind 2 T Locus_1988 23 Ind 2 C Locus_3333 18 2
Ind 3 T Locus_1988 23 Ind 3 T Locus_3333 18 2
Ind 4 C Locus_1988 23 Ind 4 - Locus_3333 18 2
Ind 5 - Locus_1988 23 Ind 5 C Locus_3333 18 2
Ind 6 T Locus_1988 23 Ind 6 T Locus_3333 18 2
Ind 1 T Locus_2301 12 Ind 1 T Locus_4123 38 3
Ind 2 T Locus_2301 12 Ind 2 T Locus_4123 38 3
Ind 3 A Locus_2301 12 Ind 3 - Locus_4123 38 3
Ind 4 - Locus_2301 12 Ind 4 A Locus_4123 38 3
Ind 5 A Locus_2301 12 Ind 5 A Locus_4123 38 3
Ind 6 T Locus_2301 12 Ind 6 T Locus_4123 38 3
Ind 1 G Locus_2301 31 Ind 1 G Locus_4123 52 4
Ind 2 C Locus_2301 31 Ind 2 C Locus_4123 52 4
Ind 3 C Locus_2301 31 Ind 3 G Locus_4123 52 4
Ind 4 G Locus_2301 31 Ind 4 C Locus_4123 52 4
Ind 5 - Locus_2301 31 Ind 5 C Locus_4123 52 4
Ind 6 G Locus_2301 31 Ind 6 - Locus_4123 52 4
我认为这可以在循环中完成,但我担心这可能需要很长时间来处理,因为我有很多数据。按位置和轨迹名称拆分数据(df1
):
split1 <- split(df1, list(df1$Name, df1$Position, df1$Name.1, df1$Position.1), drop = TRUE)
do.call(rbind,
lapply(split1, function(x) {
all_letters <- union( x$Nuk, x$Nuk.1 )
all_letters <- all_letters[all_letters != "-"]
letter_comb <- expand.grid(all_letters, all_letters, stringsAsFactors = FALSE)
data.frame(
FGT = all(
sapply( seq_len(nrow(letter_comb)), function(i) {
any(x$Nuk == letter_comb[i,1] & x$Nuk.1 == letter_comb[i,2])
})
),
Name = x$Name[1], Position = x$Position[1],
Name.1 = x$Name.1[1], Position.1 = x$Position.1[1]
)
})
)
# FGT Name Position Name.1 Position.1
# Locus_1988.23.Locus_3333.15 TRUE Locus_1988 23 Locus_3333 15
# Locus_1988.23.Locus_3333.18 FALSE Locus_1988 23 Locus_3333 18
# Locus_2301.12.Locus_4123.38 FALSE Locus_2301 12 Locus_4123 38
# Locus_2301.31.Locus_4123.52 TRUE Locus_2301 31 Locus_4123 52