我有超过200列的data.frame
,并包括以下包括有关这个问题列一个子集:独特的组合,基于标准从一行
>df
Variant Pos ID DB.0.count DB.1.count sample1 sample2 sample3 sample4 sample5 sample6 sample7 sample8 sample9 sample10
variant5 1234567 A 5 5 1/0 1/0 1/0 1/1 1/1 0/0 1/0 0/0 1/0 1/1
. . . . . F1 F1 F1 F2 F2 F3 F4 F4 F4 F5
我想:
1.使samples1-sample10列,其中每个组合包含来自每个F数一个样品,即,每个组合包含5个样品从F1,F2,F3,F4,F5每一个样品的所有可能的组合。
所以在上面的实例中会有18点的组合,例如:
第一组合将是SAMPLE1,sample4,sample6,sample7,sample10
第二组合是SAMPLE1,sample4,sample6 ,样品8,sample10
第三组合是SAMPLE1,sample4,sample6,sample9,sample10
我与unique
,duplicated
和0123发挥各地阅读相关帖子后,却没有任何地方。
然后,我想输出每个独特的组合到一个新的data.frame
,对样本中的样本中的每个变量执行计数,并将结果输出到新列,然后执行下面的Fisher精确测试并输出到新列,下面,将下面的代码应努力做到:(费代码在这里了解到:Fisher's exact test on values from large dataframe and bypassing errors)
df.combo.1$pop.0/0.count <- apply(df.combo.1[,6:10], 1, function(u) length(which(grepl("0/0",u))==TRUE))
df.combo.1$pop.1/0.count <- apply(df.combo.1[,6:10], 1, function(u) length(which(grepl("1/0",u))==TRUE))
df.combo.1$pop.1/1.count <- apply(df.combo.1[,6:10], 1, function(u) length(which(grepl("1/1",u))==TRUE))
df.combo.1$pop.0.count <- (2*(apply(df.combo.1[,6:10], 1, function(u) length(which(grepl("0/0",u))==TRUE))) + apply(df.combo.1[,6:10], 1, function(u) length(which(grepl("0/1",u))==TRUE)))
df.combo.1$pop.1.count <- (2*(apply(df.combo.1[,6:10], 1, function(u) length(which(grepl("1/1",u))==TRUE))) + apply(df.combo.1[,6:10], 1, function(u) length(which(grepl("0/1",u))==TRUE)))
res <- NULL
for (i in 1:nrow(df.combo.1)){
table <- matrix(c(df.combo.1[i, 4], df.combo.1[i, 5], df.combo.1[i, 14], df.combo.1[i, 15]), ncol = 2, byrow = TRUE)
# if any NA occurs in your table save an error in p else run the fisher test
if(any(is.na(table))) p <- "error" else p <- fisher.test(table)$p.value
# save all p values in a vector
res <- c(res,p)
}
df.combo.1$fishers <- res
>df.combo.1
Variant Pos ID DB.0.count DB.1.count sample1 sample4 sample6 sample7 sample10 pop.0/0.count pop.1/0.count pop.1/1.count pop.0.count pop.1.count fishers
variant5 1234567 A 5 5 1/0 1/1 0/0 1/0 1/1 1 2 2 4 6 1.0000
. . . . . F1 F2 F3 F4 F5
2.最后,我想创建一个data.frame
,其中列出了每一个独特的组合Fisher精确p值如下:
>new.df
combo fishers
1 1.0000
2 1.0000
3 1.0000
4 1.0000
etc
我认为这整个练习可能需要某种for循环?
完美,太感谢你了! – emily