R 用NA/NULL替换不需要的值
我有一个很长的向量列表,如前所述,未经验证的值必须替换为NA/NULL 65.12、64.94、64.76、64.58、64.40、64.58、64.76、64.94、64.76、67.28、64.76、64.40。。。。。。。是向量/数组,我最多有8000个值 考虑到第一个数据65.12作为当前参考值,我想用NA/NULL替换绝对差值小于0.5的连续值 一旦获得第二个数据点,它必须是新的参考点64.58,并且必须从获得的第二个点计算下一个差值,如下所示 所以输出应该是这样的: 65.12,不,不,64.58,不,不,不,不,不,67.28,64.76,不R 用NA/NULL替换不需要的值,r,R,我有一个很长的向量列表,如前所述,未经验证的值必须替换为NA/NULL 65.12、64.94、64.76、64.58、64.40、64.58、64.76、64.94、64.76、67.28、64.76、64.40。。。。。。。是向量/数组,我最多有8000个值 考虑到第一个数据65.12作为当前参考值,我想用NA/NULL替换绝对差值小于0.5的连续值 一旦获得第二个数据点,它必须是新的参考点64.58,并且必须从获得的第二个点计算下一个差值,如下所示 所以输出应该是这样的: 65.12,不,
任何想法或建议都会大有帮助。我不确定是否有合适的方法将其矢量化,因此我将使用直接for循环解决方案。尽管从速度的角度来看,for循环在R中并不理想,但它似乎可以很好地扩展到数百万个数据点
a <- c(65.12, 64.94, 64.76, 64.58, 64.40, 64.58, 64.76, 64.94, 64.76, 67.28,64.76, 64.40)
cleanVect <- function(a){
x <- a[1]
b <- c()
b[1] <- x
for (i in 2:length(a)){
if (abs((x - a[i])) < .5){
b[i] <- NA
} else {
x <- a[i]
b[i] <- a[i]
}
}
return(b)
}
cleanVect(a)
[1] 65.12 NA NA 64.58 NA NA NA NA NA 67.28 64.76 NA
这对于8000个条目来说运行得相当快;我测试了多达800万台,但它仍能在大约3秒钟内运行
x1 <- round(runif(8000,55,56),2)
cleanVect(x1)
test replications elapsed relative user.self sys.self user.child sys.child
1 cleanVect(x1) 100 0.3 1 0.28 0.02 NA NA
您可以使用replacev1、cFALSE、absdiffv1<0.5创建条件,但条件中不能存在NA NULLvector@akrun不。不工作。一旦得到新点,我需要从新点开始计算差值。您只需检查连续值的差异值,得到的结果是65.12 NA NA NA NA 67.28 64.76 NA,这不是我想要的,不清楚新点您的解释是,我想用NA/NULL替换绝对差值小于0.5的连续值。另外,不清楚为什么应该在64.58上重置它。这与:。使用循环的解决方案,您只需稍作修改即可完成所需的操作,请告诉我是否适合YouTunks进行计时验证。