2016-10-05 15 views
0

データフレーム内でいくつかの操作を実行する必要があります。少し具体的ですが、実行方法がわかりません。ので、私の問題は、私はこの1つのデータフレームを作成する必要があるということですが、私はデータ$ PVALに応じて連続した行を結合する必要があり、データフレーム内の連続する行の選択... r

x<-seq(1:250) 
pos<-seq(1000,1249,1) 
pval<-c(rep(0.25,40),rep(0.0001,10),rep(0.14,100),rep(0.0005,20),rep(0.58,10),rep(0.00001,20),rep(0.85,50)) 
len<-rep(0.1,250) 
nsnp<-rep(33.7,250) 
data<-data.frame(cbind(x,pos,pval,len,nsnp)) 

まあ:ここではいくつかのデータです。すなわち、データ$ xでソートすると、データ$ pval < = 0.05を持つすべての連続する要素に参加する必要があります。そして、実行:0.05

  • 合計0.05
  • よりデータ$ PVAL <を持つすべての連続したデータ$ LEN =よりデータ$ PVAL < =との最初と最後の連続した要素間のデータ$ POSの

    1. 平均を合計データ$ PVAL < =を持つすべての連続したデータ$ nsnp 0.05

    よりも、私たちのデータフレーム(データ)で連続したデータ$ xに番号の3つの領域があるので、最終的なデータベースは次のようになります必要があります。

     pos len nsnp 
    [1,] 1044.5 1 337 
    [2,] 1159.5 2 674 
    [3,] 1189.5 2 674 
    

    この数字は次のように求めることができる。

    data2<-subset(data,data$pval<=0.05) 
    mean(data2$pos[data2$pos>=1040 & data2$pos<=1049]) 
    sum(data2$len[data2$pos>=1040 & data2$pos<=1049]) 
    sum(data2$nsnp[data2$pos>=1040 & data2$pos<=1049]) 
    mean(data2$pos[data2$pos>=1150 & data2$pos<=1169]) 
    sum(data2$len[data2$pos>=1150 & data2$pos<=1169]) 
    sum(data2$nsnp[data2$pos>=1150 & data2$pos<=1169]) 
    mean(data2$pos[data2$pos>=1180 & data2$pos<=1199]) 
    sum(data2$len[data2$pos>=1180 & data2$pos<=1199]) 
    sum(data2$nsnp[data2$pos>=1180 & data2$pos<=1199]) 
    

    私は私の問題が理解されている今、願っています。私の問題は、データ$ xに従って連続する行を選択する方法が見つからないということです。私の例では、これらの連続した行は:pos 1040-1049、pos 1150-1169およびpos 1180-1199です。

  • +0

    ハイセブ。何を試しましたか? – Vincent

    +0

    最初の部分については、データ$ pvalに従ったサブセットです。しかし、私は連続する行の操作を開始する方法を知っていません。ありがとうございました – Cebs

    +0

    また、私はなぜ私の質問downvote理解していません...例と完璧な正当な質問は、私はよく説明されていると信じて、誰かが私に理由を説明してください... – Cebs

    答えて

    2

    次のようにそうではないならば、我々は連続しpos値でグループ化することができ、しかし

    library(dplyr) 
    data2 %>% 
        group_by(pval) %>% 
        summarise(pos = mean(pos), len = sum(len), nsnp = sum(nsnp)) 
    # A tibble: 3 × 4 
    # pval pos len nsnp 
    # <dbl> <dbl> <dbl> <dbl> 
    #1 1e-05 1189.5  2 674 
    #2 1e-04 1044.5  1 337 
    #3 5e-04 1159.5  2 674 
    

    、これがそう dplyrを使用して、 pvalによってグループ化することによって行うことができるようです、

    library(dplyr) 
    data2 %>% 
        group_by(new = cumsum(c(1, diff(pos) != 1))) %>% 
        summarise(pos = mean(pos), len = sum(len), nsnp = sum(nsnp)) 
    # A tibble: 3 × 4 
    # new pos len nsnp 
    # <dbl> <dbl> <dbl> <dbl> 
    #1  1 1044.5  1 337 
    #2  2 1159.5  2 674 
    #3  3 1189.5  2 674 
    
    0

    あなたはとてもとしてデータフレームdをサブセットすることができます:データフレームをサブセット化する方法について

    d[d$variable <= 0.05,] 
    

    グーグルRのrefcard。残りの部分を達成するための基本的なRガイドをお読みください。

    幸運

    +0

    はい、私はサブセットできることを知っています。しかし、私の質問はサブセットの仕方ではなく、連続した行で必要な操作を得る方法です。 – Cebs

    関連する問題