В базе R мы могли бы использовать mapply
с cut
, используя breaks
из range..
столбцов и labels
из sd..
столбцов, чтобы получить sd_value
.
df1[paste0("sd_value", seq_len(ncol(df1)))] <-
mapply(function(x, y, z) cut(x, breaks = c(-Inf, y), labels = z),
df1, df2[c(TRUE, FALSE)], df2[c(FALSE, TRUE)])
df1
# value_1 value_2 sd_value1 sd_value2
#1 0.05 0.56 1 2
#2 0.10 0.78 1 3
#3 0.80 0.98 4 4
#4 0.45 1.50 3 4
#5 0.06 2.79 1 5
Выбор столбцов может варьироваться в зависимости от того, как столбцы назначены в вашем фактическом df2
.В показанном примере столбцы range..
и sd_value..
расположены поочередно, поэтому я использовал df2[c(TRUE, FALSE)]
и df2[c(FALSE, TRUE)]
для выбора столбца поочередно.Если в действительности это не так, вы можете использовать grep
, чтобы получить индекс столбца на основе их имени
range_cols <- grep("^range", names(df2))
sd_cols <- grep("^sd", names(df2))
, а затем использовать его в mapply
, например,
df1[paste0("sd_value", seq_len(ncol(df1)))] <-
mapply(function(x, y, z) cut(x, breaks = c(-Inf, y), labels = z),
df1, df2[range_cols], df2[sd_cols])