Этот вопрос заключается в том, как отобразить значение из 1 таблицы и назначить значение на основе значений из другой таблицы, которые находятся в пределах интервала (2 столбца).
Приведенное ниже решение предназначено только для демонстрации, фактические данные составляют 1хх столбцов (для объекта b
и тысяч строк объекта x
, поэтому текущее решение потребовало бы, чтобы я записал множество строк код (см. объект w_aaa
и w_bbb
et c.).
Если R решение, предпочтительно основание R. Решение также в SAS
.
# example data
x <- data.frame(item_id=c(1,2,3),aaa=c(3,15,3),bbb=c(17,12,5),ccc=c(1,2,3))
p <- data.frame(bin=c(1:3,1:5),vmin=c(0,9,28,18.17,14.67,11.64,1.8,-0.33),
vmax=c(8,27,40,35502,18,14.5,11.5,1.75),values=c(-0.62,-0.41,-0.04,-0.715,-0.46,-0.40,-0.14,0.27),
var=c(rep("aaa",3),rep("bbb",5)))
# demonstrate simplified solution
l <- with(p, split(p, var))
a <- x[ ,which(colnames(x) %in% as.character(l[[1]]$var[1])), drop=F]
b <- x[ ,which(colnames(x) %in% as.character(l[[2]]$var[1])), drop=F]
w_aaa <- apply(a, 1, function(x) l[[1]][ l[[1]]["vmin"] <= x & x <= l[[1]]["vmax"] ][4])
w_bbb <- apply(b, 1, function(x) l[[2]][ l[[2]]["vmin"] <= x & x <= l[[2]]["vmax"] ][4])
res <- data.frame(x,w_aaa,w_bbb)