2017-07-19 8 views
1

いくつかの値が欠けているデータセットを持っていますが、今度はsample()関数を使用してNAを10回代入する必要があります。サンプル関数sample()を使用して、RのNAをいくつかの基準に置き換えます。

ID <- c(rep(1,4), rep(3, 5), rep(4,4),rep(5,5),rep(6,5)) 
Begin <- c(0,2.5,3.5,3,7,8,7,25,25,10,15,0,0,1,NA,10,11,13,NA,NA, 8, 12, NA) 
End <- c(1.5,3.5,NA,6,12,8,11,29,35, 12,19,NA,28,5,20,30,20,25,6,7,13,NA, 23) 
GA <- c(23, 34, 38, 16, 20, 38, 32, 28, 30, 34,25,45,34,23, 34, 38, 16, 20, 38, 32, 28, 30, 34) 
df <- data.table(ID, Begin, End, GA) 
    ID Begin End GA 
1: 1 0.0 1.5 23 
2: 1 2.5 3.5 34 
3: 1 3.5 NA 38 
4: 1 3.0 6.0 16 
5: 3 7.0 12.0 20 
6: 3 8.0 8.0 38 
7: 3 7.0 11.0 32 
8: 3 25.0 29.0 28 
9: 3 25.0 35.0 30 
10: 4 10.0 12.0 34 
11: 4 15.0 19.0 25 
12: 4 0.0 NA 45 
13: 4 0.0 28.0 34 
14: 5 1.0 5.0 23 
15: 5 NA 20.0 34 
16: 5 10.0 30.0 38 
17: 5 11.0 20.0 16 
18: 5 13.0 25.0 20 
19: 6 NA 6.0 38 
20: 6 NA 7.0 32 
21: 6 8.0 13.0 28 
22: 6 12.0 NA 30 
23: 6 NA 23.0 34 
  1. グループID
  2. によって、我々は終了変数をサンプリングした場合、NAの範囲は、GAよりも小さい開始より大きく、前の行よりも大きく、かつ次の行よりも小さい必要があります。
  3. 我々は可変開始サンプル場合は、NAの範囲は、終了の前の行よりもエンド変数より小さいが、それ以上に必要

例:

3行目は、終了変数は、NAの場合になるように私たちは、NAが[3.5,6] NAが範囲内にする必要があること

行12、終了変数はNAで、[19,28]

行15、開始がある範囲内であることが必要であること、サンプルNA、したがって、NA> = 5 & NA < = 20、NA < = 34、従って範囲[5,20]

行19、開始はNAである、[0,6]

行20、開始あるNA、NA> = 6、NA < = 7ので、範囲[6,7]

列22は、エンドは、開始NA、NA [13,23]

列23の範囲であるNA、NA> =私たちは列22用のサンプル値、 NA < = 23

+0

これまでに何を試しましたか? –

+0

私はそれが自然言語ではないときに英語でこれを行うように制約されている人に共感しますが、あなたの質問に進み、文法上の誤りを訂正できるかどうかを見てください。私はそれをあなたのために十分にうまく理解していません。 –

+0

私はほとんど完了しました。後で書き直します – BIN

答えて

2

これがすべての特殊なケースをカバーするかどうかはわかりません(例:与えられたサンプルについては、動作するはずです。

変数_pre_nextの作成は含まれていません。

私はfor-loopを使用して値rowise(by INDEX)を作成しました。 sample()の代わりにrunif()を使用しました。なぜなら、あなたは整数だけを取得したくないと思うからです。

df[, INDEX := 1:.N] 
df[, End_next := shift(End, type = "lead")] 
df[, End_pre := shift(End, type = "lag")] 
df[, ID_pre := shift(ID, type = "lag")] 
df[, ID_next := shift(ID, type = "lead")] 

for (i.row in c(1:dim(df)[1])) { 
    # i.row = 3 
    # adjust the values after last sample 
    df[, Begin_pre := shift(Begin, type = "lag")] 
    df[, End_pre := shift(End, type = "lag")] 

    # replace NA with sample (runif) 
    df[is.na(Begin) & INDEX == i.row, 
    Begin := runif(1, min = ifelse(ID_pre == ID, End_pre,0), max = End)] 
    df[is.na(End) & INDEX == i.row, 
    End := runif(1, min = max(Begin, ifelse(ID_pre == ID, End_pre, Begin)), 
        max = min(GA, ifelse(ID_next == ID, End_next, GA)))] 
} 

私はこれがあなたに役立つことを願っています。

+0

ありがとう、すべての特別なケースを見た後、私は最初にサンプルし、次にサンプルを開始する必要があると思う、それは同時に両方をサンプリングしようとするより意味がある – BIN

関連する問題