0

我有一个如下所示的数据集。传感器每分钟评估一次数据。 WEIGHT是一个因变量。TIME表示小时/分钟。这些数据将积累多年。问题是row[4]。在这一行,重量有一个奇怪的值(超出范围),这是由传感器错误引起的。您必须提醒,任何人都不能期望什么时候会出现奇怪的值。

我想要的是制作一个如下所示的程序。1. 使用方法,设置方差范围(设置范围为 10 到 50) 2. 使用 for(i) 语句,检查方差(权重)是否在范围内。3. 当方差超出范围时,将 weight[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

你可以使用withinandis.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 回答