R 将超出范围的值设置为NA
我有一个类似下面的数据集。 传感器每分钟评估一次数据。 体重是一个因变量。时间是指小时/分钟。这些数据将积累多年。 问题出在第[4]行。在这一行,权重有一个奇怪的值,它超出了这个值 范围,由传感器错误引起。您必须提醒,任何人都无法预料何时会出现奇怪的值 我要做的是使程序执行如下。 1.使用方法,将varianceset range的范围设置为10到50 2.使用fori语句,检查varianceweight是否在范围内。 3.当方差超出范围时,将权重[i]输入为NAR 将超出范围的值设置为NA,r,R,我有一个类似下面的数据集。 传感器每分钟评估一次数据。 体重是一个因变量。时间是指小时/分钟。这些数据将积累多年。 问题出在第[4]行。在这一行,权重有一个奇怪的值,它超出了这个值 范围,由传感器错误引起。您必须提醒,任何人都无法预料何时会出现奇怪的值 我要做的是使程序执行如下。 1.使用方法,将varianceset range的范围设置为10到50 2.使用fori语句,检查varianceweight是否在范围内。 3.当方差超出范围时,将权重[i]输入为NA ID TIME
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
如果数据位于名为d的数据框中,则可以使用:
d$WEIGHT[d$WEIGHT<10 | d$WEIGHT>50] <- NA
对于这种任务,您不应该使用循环,而应该使用向量索引。您可以在和is.na中使用,因为我无法抗拒:
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%:-
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