2017-10-11 5 views
1

私は、列内の位置(これはSNP /ゲノミクスの仕事です)を表す値を持つデータセットを持っています。欠損データによって表される範囲を計算する - R

私は欠けているデータの各伸びの距離を計算する方法を見つけようとしています(以下「ギャップ」といいます)。例えば。 1466-1650 = 184

また、連続観測の伸びを計算することもできますが、最初の問題を把握すると比較的簡単になると思います。例えば。 1450-1466 = 16

は、ここでデータが編成されている方法の例です:

1450 
1466 
NA 
NA 
1650 
1654 
1943 
NA 
2568 

ネクタイ私の次の問題は、データセット内のすべてのサンプルを分析しようとするとこの質問 - 各サンプルをループ - see my question here

答えて

0

rle機能(ランレングスエンコーディング)を使用してこれを行うことができます。このような何か...

vec <- c(1450,1466,NA,NA,1650,1654,1943,NA,2568) #your data 

rl <- rle(is.na(vec)) #rle on whether values are NA 

これは

rl 
Run Length Encoding 
    lengths: int [1:5] 2 2 3 1 1 
    values : logi [1:5] FALSE TRUE FALSE TRUE FALSE 

ので、あなたはギャップがこの

gaps <- vec[cumsum(rl$lengths)[rl$values]+1] - #upper bound of each NA group 
     vec[c(1,cumsum(rl$lengths))[rl$values]] #lower bound 

gaps 
[1] 184 625 
+0

ありがとう!私は連続して別の列を作成しようとしています:rl2 < - rle(!is.na(df $ data))#rleは値がNAではないかどうかについて - しかし、私はcumsumを働かせることはできません。 ? – krepsen

+1

これを必要とする人には、PS単体の観測値はNAと報告されているので、それを見てください: cont < - df $ data [cumsum(r2 $ lengths)[r2 $値]] - #upper_bound df $ data [cumsum( r2 $ lengths)[r2 $値] -1] #lower_bound – krepsen

3

がうまくいけば、このような何かが助けるください

は非空の行を選択し、最初のインデックスを除くデータにそれらを添付し、その後、それらの違いを見つけます。

nonEmptyRows<-which(!is.na(df$data)) 
df[nonEmptyRows[-1], "gaps"]<-diff(df$data[nonEmptyRows]) 

data gaps 
1450 NA 
1466 16 
    NA NA 
    NA NA 
1650 184 
1654 4 
1943 289 
    NA NA 
2568 625 
+0

おかげのように長さをうまくすることができますを生成!ギャップ長(すなわち、NA後の最初の値 - たとえば184)および連続長(4 + 289)を別々の列に抽出する方法はありますか? – krepsen

関連する問題