применить к нескольким столбцам аргумента - PullRequest
0 голосов
/ 04 февраля 2012

У меня в большом наборе будет множество переменных:

set.seed (14)
pool = sample (c("AA","AB", "BB"), 100, replace = T) 
mydf <- data.frame (M1= pool[1:10], M2= pool[11:20],
M3= pool[21:30], M4= pool[31:40],  M5= pool[41:50], 
  M6= pool[51:60],  M7= pool[61:70], M8 = pool[71:80], 
  M9 = pool[81:90],  M10 = pool[91:100])

Необходимо установить пакет "hapassoc", если он был установлен ранее.

install.packages ( "hapassoc")

>  library(hapassoc)
> example1.haplos <- pre.hapassoc(mydf, numSNPs = 3, allelic= F)

Haplotypes will be based on the following SNPs (genotypic format): 
 M8, M9, M10 
Remaining variables are: 
 M1, M2, M3, M4, M5, M6, M7

Он принимает последние 3 переменные в группе. Но я хочу применить эту функцию, разбивая данные на более мелкие части по группам -

M1, M2, M3   group 1
M4, M5       group 2
M6, M7, M8   group 3
M9, M10      group 4 

Таким образом, numSNP будут представлены следующим вектором:

nsp <- c(3, 2, 3, 2)

Я хочу сохранить $ haploMat для каждой группы

example1.haplos$haploMat
 haplo1 haplo2
1    hBBA   hBAB
3    hAAB   hABB
4    hABA   hABA
6    hAAA   hBBA
7    hAAA   hAAA
8    hBBA   hBBB
9    hABB   hBBB
10   hABA   hBAB
12   hAAA   hBBB
13   hAAB   hBBA
14   hABA   hABA
15   hAAB   hBAB

Окончательный вывод содержит восемь столбцов group1.haplo1, goup1.haplo2, group2.haplo1, group2.haplo2, group3.haplo1, group4.haplo1, group4.haplo2.

Как мне этого добиться?

1 Ответ

1 голос
/ 04 февраля 2012

Это то, что вы после? (укажите номера столбцов групп в качестве элементов списка, присвоенного grps). Вам понадобится установленный пакет reshape2. Вы можете сделать что-то подобное с rbind.fill() из пакета plyr.

set.seed (14)
pool = sample (c("AA","AB", "BB"), 100, replace = T) 
mydf <- data.frame (M1= pool[1:10], M2= pool[11:20],
M3= pool[21:30], M4= pool[31:40],  M5= pool[41:50], 
  M6= pool[51:60],  M7= pool[61:70], M8 = pool[71:80], 
  M9 = pool[81:90],  M10 = pool[91:100])

library(hapassoc)

grps <- list(1:3, 4:5, 6:8, 9:10)
haplos <- lapply(grps, function(x) {
    out <- pre.hapassoc(mydf[, x], numSNPs=length(x), allelic=F, 
      verbose=F)$haploMat
    row.names(out) <- as.numeric(row.names(out))
    out
})
haplos <- lapply(haplos, t)
library(reshape2)
haplos <- melt(haplos,value.name='haplotype')
haplos <- dcast(haplos, Var2 ~ L1 + Var1, value.var='haplotype')

РЕЗУЛЬТАТ

haplos

   Var2 1_haplo1 1_haplo2 2_haplo1 2_haplo2 3_haplo1 3_haplo2 4_haplo1 4_haplo2
1     1     hABA     hABB      hBA      hBA     hAAA     hAAB      hAA      hAA
2     2     <NA>     <NA>      hAB      hAB     hAAB     hABB      hAA      hAA
3     3     hBAA     hAAB      hBA      hBB     hBBB     hBAA      hAA      hBA
4     4     hBBB     hBAA      hBA      hAB     <NA>     <NA>      hAB      hBB
5     5     <NA>     <NA>      hBB      hAA     hABB     hAAA      hAB      hBB
6     6     hABB     hBBB      hBA      hBB     hABA     hAAB      hBB      hBB
7     7     hBBB     hBBB      hAA      hAA     hBBB     hBAA      hAB      hBB
8     8     hBBB     hABA      hBA      hAB     <NA>     <NA>      hAA      hAA
9     9     <NA>     <NA>      hBB      hAA     hAAB     hAAB      hAA      hAB
10   10     hBBB     hBAA      hAA      hBA     hABB     hBBB      hAB      hAB
11   11     <NA>     <NA>      hBB      hBB     hBBA     hBBB     <NA>     <NA>
12   12     hBBB     hABA      hAB      hBB     hABA     hABB     <NA>     <NA>
13   13     <NA>     <NA>     <NA>     <NA>     hABB     hBAA     <NA>     <NA>
14   14     hABB     hBBB     <NA>     <NA>     <NA>     <NA>     <NA>     <NA>
15   15     <NA>     <NA>     <NA>     <NA>     hAAB     hBBA     <NA>     <NA>
16   16     hBAA     hABA     <NA>     <NA>     hAAA     hBBB     <NA>     <NA>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...