data.frame
其中一列指定id,另一些列具有数值。在这些数值列中,有一小部分整数和一小部分浮点数:
set.seed(1)
df <- data.frame(id = paste0("id_",sample(LETTERS,100,replace=T)),
var_1 = c(as.integer(runif(80,0,3)),runif(20,0,2))[permute::shuffle(100)],
var_2 = c(as.integer(runif(90,0,3)),runif(10,0,2))[permute::shuffle(100)],
var_3 = c(as.integer(runif(70,0,3)),runif(30,0,2))[permute::shuffle(100)])
我在找一个
function
NA
.
现在我有这个:
df[,-1] <- do.call(cbind,lapply(colnames(df)[-1], function(i){
dists <- ceiling(df[,i])-df[,i]
idx <- which(dists > 0.5)
if(length(idx) > 0) dists[idx] <- dists[idx]-1
idx <- which(abs(dists) > 0.1)
if(length(idx) > 0) dists[idx] <- NA
return(df[,i]+dists)
}))
但是想知道有没有更快/更优雅的呢?