У меня есть два набора данных dataA и dataB со столбцами: id, posX и value.Два набора данных имеют разные частоты дискретизации, т. Е. Количество строк не одинаково для одного и того же идентификатора.Я делаю своего рода интерполяцию:
interp <- function(coil, coilY){
n <- nrow(coil)
Y <- matrix(0,nrow = n,ncol = 1)
for (i in 1:n){
ind <- order(abs(coil[i,1]-coilY[,1]),decreasing = FALSE)[1:2]#coil[i,1] = inpos and coilY[,1]=outpos
if(coilY[ind[1],1]==coilY[ind[2],1]){
Y[i] <- (coilY[ind[1],2]-coilY[ind[2],2])/2
} else {
Y[i] <- ((coilY[ind[1],2]-coilY[ind[2],2])/(coilY[ind[1],1]-coilY[ind[2],1]))*(coil[i,1]-coilY[ind[1],1]) + coilY[ind[1],2]
}
}
return(Y)
}
Проблема в приведенном выше коде, я предполагаю, что на каждой итерации рассматривается один и тот же идентификатор для datA и datB, т. Е.
>dataA
id posX val
1 2 .4
1 3 .4
1 4 .7
>dataB
id posX val
1 1 .4
1 2 .4
1 3 .7
1 4 .8
1 5 .9
ВВыше сценария я могу игнорировать идентификатор и сделать интерполяцию.Тем не менее, когда у меня много повторяющихся идентификаторов, как я могу настроить функцию interp
или как я могу выполнить цикл, рассматривая строки с идентификаторами 1,2, ..., 100 на каждой итерации.Проблема для данных следующего типа.
>dataA
id posX val
1 2 .4
1 3 .4
2 4 .7
..
>dataB
id posX val
1 1 .4
1 2 .4
2 3 .7
2 4 .8
2 5 .9