Good practice to provide data with a reprex
. (See the FAQ).
When in doubt, abstract away the common elements.
When modifying all-numeric data, take advantage of matrix algebra.
trim_to <- function(x,y) {
wide = dim(x)[1]
long = dim(x)[2]
size = wide * long
m = as.matrix(x,nrow = wide)
n = matrix(rep(y,size),nrow = wide)
m[which(m > n)] = 1
return(m)
}
d <- data.frame(
lazy_a = c(0.24, 0.66, 0.09, 0.08, 0.9, 0.18,0.88, 0.19),
lazy_b = c(0.13, 0.51, 0.5, 0.92, 0.21, 0.59, 0.24,0.13),
lazy_c = c(0.22, 0.42, 0.51, 0.61, 0.1, 0.99, 0.77, 0.65),
lazy_d = c(0.18, 0.47, 0.44, 0.8, 0.03, 0.58, 0.01, 0.86),
lazy_e = c(0.77, 0.69, 0.97, 0.95, 0.06, 0.25, 0.82, 0.57),
lazy_f = c(0.83, 0.75, 0.63, 0.08, 0.96, 0.09, 0.66, 0.41),
lazy_g = c(0.9, 0.54, 0.27, 0.97, 0.13, 0.21, 0.86, 0.1),
lazy_h = c(0.59, 0.74, 0.25, 0.84, 0.57, 0.44, 0.27, 0.4))
d
#> lazy_a lazy_b lazy_c lazy_d lazy_e lazy_f lazy_g lazy_h
#> 1 0.24 0.13 0.22 0.18 0.77 0.83 0.90 0.59
#> 2 0.66 0.51 0.42 0.47 0.69 0.75 0.54 0.74
#> 3 0.09 0.50 0.51 0.44 0.97 0.63 0.27 0.25
#> 4 0.08 0.92 0.61 0.80 0.95 0.08 0.97 0.84
#> 5 0.90 0.21 0.10 0.03 0.06 0.96 0.13 0.57
#> 6 0.18 0.59 0.99 0.58 0.25 0.09 0.21 0.44
#> 7 0.88 0.24 0.77 0.01 0.82 0.66 0.86 0.27
#> 8 0.19 0.13 0.65 0.86 0.57 0.41 0.10 0.40
(d <- trim_to(d,0.75))
#> lazy_a lazy_b lazy_c lazy_d lazy_e lazy_f lazy_g lazy_h
#> [1,] 0.24 0.13 0.22 0.18 1.00 1.00 1.00 0.59
#> [2,] 0.66 0.51 0.42 0.47 0.69 0.75 0.54 0.74
#> [3,] 0.09 0.50 0.51 0.44 1.00 0.63 0.27 0.25
#> [4,] 0.08 1.00 0.61 1.00 1.00 0.08 1.00 1.00
#> [5,] 1.00 0.21 0.10 0.03 0.06 1.00 0.13 0.57
#> [6,] 0.18 0.59 1.00 0.58 0.25 0.09 0.21 0.44
#> [7,] 1.00 0.24 1.00 0.01 1.00 0.66 1.00 0.27
#> [8,] 0.19 0.13 0.65 1.00 0.57 0.41 0.10 0.40
Created on 2023-03-28 with reprex v2.0.2