0

こんにちは私はそのようなリストを手に入れました

$`2`
  chr.pos  nt.pos CNV GRP
      1  783605   1   2
      1  888149   1   2
      1  991311   1   2
      1 1089305   1   2
      1 1177669   1   2

$`4`
 chr.pos  nt.pos CNV GRP
      2 1670488   1   4
      2 1758800   1   4

$`6`
 chr.pos  nt.pos CNV GRP
      2 1902924   1   6
      2 1978088   1   6

そして、各要素、一意の染色体、CNV、グループ、および最高値と最低値の nt.pos を抽出したいので、出力は次のようになります。データフレームを好む

chr.pos  Start     End       GRP
 1         783605    1177669   2
 2         1670488   175880    4
 2         1902924   1978088   6

私はこれで試しました

results<-lapply(mylist, function(x){

return(as.data.frame(unique(x$chr.pos),range(x$nt.pos)[1],range(x$nt.pos)  [2],unique(x$GRP)))

}
) 

しかしもちろん、私が得たのはリストです。

私を手伝ってくれますか?

4

3 に答える 3

3

次のように、リストの名前が「dat」であると仮定します。

dat <- read.table(header = TRUE, text = "chr.pos  nt.pos CNV GRP
1  783605   1   2
1  888149   1   2
1  991311   1   2
1 1089305   1   2
1 1177669   1   2
2 1670488   1   4
2 1758800   1   4
2 1902924   1   6
2 1978088   1   6")
dat <- split(dat, dat$GRP)

最初に、質問: 本当に としてそれが必要ですかlist、それともただの long にすることができdata.frameますか? リストのままにしておく必要がある場合は、おそらく次のことを試してください。

  1. 適用する()

    data.frame(t(sapply(dat, function(x) 
      data.frame(chr.pos = unique(x["chr.pos"]), 
                 Start = min(x["nt.pos"]), 
                 End = max(x["nt.pos"]), 
                 GRP = unique(x["GRP"])))))
    
  2. ラップリー()

    do.call(rbind, lapply(dat, function(x) 
      data.frame(chr.pos = unique(x["chr.pos"]), 
                 Start = min(x["nt.pos"]), 
                 End = max(x["nt.pos"]), 
                 GRP = unique(x["GRP"]))))
    

どちらも次のようになります。

#   chr.pos   Start     End GRP
# 2       1  783605 1177669   2
# 4       2 1670488 1758800   4
# 6       2 1902924 1978088   6

次に、それが long になる可能性がある場合は、data.frame次を調べdata.table()ます。

library(data.table)
DaT <- data.table(do.call(rbind, dat), key = "GRP")
DaT[, list(chr.pos = unique(chr.pos),
           Start = min(nt.pos),
           End = max(nt.pos)), by = key(DaT)]
#    GRP chr.pos   Start     End
# 1:   2       1  783605 1177669
# 2:   4       2 1670488 1758800
# 3:   6       2 1902924 1978088
于 2012-10-31T09:50:10.420 に答える
1

これはトリックを行います:(datデータフレームのリストであると仮定します。)

structure(
    as.data.frame(cbind(do.call(rbind,
                                lapply(dat,
                                       function(x) c(x[["chr.pos"]][1], 
                                                     range(x[["nt.pos"]])))),
                        as.numeric(names(dat)))),
    .Names = c("chr.pos", "Start", "End", "GRP"))

#   chr.pos   Start     End GRP
# 2       1  783605 1177669   2
# 4       2 1670488 1758800   4
# 6       2 1902924 1978088   6
于 2012-10-31T08:40:59.160 に答える
0

ありがとう、スヴェン、

私はこれを使って同様の方法でそれをしました

N <- length(results)  #
DF <- data.frame(chr=rep(NA, N), Start=rep(NA, N), End=rep(NA,N), Group=rep(NA,N), stringsAsFactors=FALSE)

for (i in 1:length(results)){

  DF[i, ] <- c(unique(results[[i]]$chr.pos), range(results[[i]]$nt.pos)[1], range(results[[i]]$nt.pos)[2],unique(results[[i]]$GRP))

}
于 2012-10-31T09:33:19.953 に答える