我有关于时长的高频数据。我发现我添加了1800 *随机数,我无法丢弃一些错误的条目。现在我很愚蠢地尝试:
for(i in 1:21863924) {while(rr[i]>=1800){rr[i]=rr[i]-1800}}
即使我一整夜都没用,这显然没有用。我想知道是否有一种更优雅的方法,因为子集化了数据集以排除错误的条目在几秒钟内就起作用了?
答案 0 :(得分:3)
可以向量化的方式完成。创建一个逻辑vector
i1 <- rr >= 1800
使用该向量替换值,同时将值分配给原始向量
rr[i1] <- rr[i1] - 1800
一个递归函数应该是
f1 <- function(x, val) {
i1 <- x >= val
x[i1] <- x[i1] - val
if(sum(x >= val) > 0) f1(x, val)
}
out <- f1(rr, val = 1800)
sum(out >= 1800)
#[1] 0
set.seed(24)
rr <- sample(20000, 100)