0

以下のようなデータセットがあります。データはセンサーによって毎分評価されます。 WEIGHT従属変数です。andTIMEは時間/分を意味します。このデータは何年にもわたって蓄積されます。問題はrow[4]. この行では、重量が異常な値 (範囲外) を示していますが、これはセンサーのエラーによって発生しています。奇妙な値がいつ発生するかは誰にも予測できないことを思い出してください。

私が欲しいのは、以下のような手順を実行することです。1. メソッドを使用して、分散の範囲を設定します (範囲を 10 から 50 に設定します)。 2. for(i) ステートメントを使用して、分散 (重み) が範囲内にあるかどうかを確認します。3. 分散が範囲外の場合、重み [i] を NA として代入します。

 ID      TIME   WEIGHT
HM001   1223    24.9
HM001   1224    25.2
HM001   1225    25.5
HM001   1226    12233
HM001   1227    25.7
HM001   1228    27.1
4

3 に答える 3

4

データが というデータ フレームにある場合はd、次を使用できます。

d$WEIGHT[d$WEIGHT<10 | d$WEIGHT>50] <- NA

forこの種のタスクには、ループではなくベクトル インデックスを使用する必要があります。

于 2013-01-28T11:04:16.990 に答える
3

この問題にはwithinandを使用できます。is.na<-あなたのデータフレームが呼ばれると仮定しますdat

within(dat, is.na(WEIGHT) <- WEIGHT < 10 | WEIGHT > 50)

     ID TIME WEIGHT
1 HM001 1223   24.9
2 HM001 1224   25.2
3 HM001 1225   25.5
4 HM001 1226     NA
5 HM001 1227   25.7
6 HM001 1228   27.1
于 2013-01-28T11:14:12.427 に答える
2

私は抵抗できなかったので:

fooweight<-runif(1e6)
wfun1<-function(x) x[x<.1 | x>.5] <- NA
wfun2<-function(x)  is.na(x) <- (x < .10 | x > .50)
microbenchmark(wfun1(fooweight),wfun2(fooweight),times=100)

Unit: milliseconds
              expr      min       lq   median       uq      max
1 wfun1(fooweight) 45.00671 47.68492 49.27120 50.28852 152.4313
2 wfun2(fooweight) 47.74992 51.05204 51.89938 53.00629 156.0306

ごめんなさい、スヴェン、あなたは約 5% の差でジュバに負けます :-)

于 2013-01-28T15:20:35.790 に答える