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, NA, NA, 64.58, NA, NA, NA, NA, NA, 67.28, 64.76,NA .....
任何想法或建议都会有很大帮助。
解决方案
我不确定是否有一种体面的方法来对其进行矢量化,所以我将采用直接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
对于 8,000 个条目,这运行得非常快;我测试了多达 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
推荐阅读
- javascript - Bootstrap 无法使用 webpack 无法找到字体
- arduino - ESP12F,无法让继电器处理来自 dht11 的数据
- typescript - 在 Typescript 中导出除少数项目外的所有内容
- css - 在 CSS 中定位矢量图像
- java - Spring 通用抽象控制器和接口 GET/DELETE 方法映射
- windows - Openshift GoLang 模板错误:没有必要指定资源,在以资源/名称形式传递参数时键入作为单独的参数
- android - 无法删除 Android 下载文件夹中的文件夹
- mysql - 如何从所有 VIEW 中更新所有 DEFINER
- python - 子集和问题的实现给出了错误的答案
- python - 每个需要验证的用户输入都需要一个while循环吗?