我有一个类似下面的数据集。
传感器每分钟评估一次数据。
WEIGHT
是一个因变量。 TIME
表示小时/分钟。这些数据将累积多年。
问题是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
答案 0 :(得分:4)
如果您的数据位于名为d
的数据框中,则可以使用:
d$WEIGHT[d$WEIGHT<10 | d$WEIGHT>50] <- NA
你不应该使用for
循环,而是使用矢量索引来完成这类任务。
答案 1 :(得分:3)
您可以使用within
和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
答案 2 :(得分:1)
因为我无法抗拒:
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%的朱巴: - )