How to list group names on resampled points after splitapply?

1 visualización (últimos 30 días)
I'm working with a drilling dataset. The rate of penetration 'rop' is acquired non-uniformly and recorded as a depth (in meters) for different holes.
I've been able to uniformly sample nonuniformly collected sample points through splitapply using the resample function then combine back into a table of the resampled depths and rop values. However, the hole names are needed based on the new resampled points.
How can the group names used for splitapply (e.g. hole names or 'holeid') be re-listed after the resampling? Or objectively speaking, how to get the holeid's listed in the final 'resampledholes' table to analyse by hole?
This is a simplified example with only two holes '12' and '13'...
holeid = [12;12;12;12;12;12;12;12;12;12;12;12;12;12;12;12;13;13;13;13;13;13;13;13;13;13;13;13;13;13;13;13;13;13;13;13];
depth = [0;0.0542;0.0801;0.2222;0.3959;0.4572;0.5110;0.5348;0.5712;0.6099;0.6437;0.6799;0.8011;0.8928;0.9590;1.0110;0;0.0432;0.1334;0.2483;0.4087;0.4443;0.5009;0.5567;0.5890;0.6253;0.6923;0.7274;0.7588;0.8296;0.8623;0.8955;0.9272;0.9652;0.9959;1.0218];
rop = [118.7000;207.8000;139.6000;176.0000;177.8000;229.3000;242.4000;138.9000;85.7000;140.8000;164.5000;125.4000;189.8000;164.0000;118.4000;211.4000;148.8000;227.9000;14.6000;220.1000;177.2000;226.0000;144.5000;114.2000;157.8000;207.8000;242.5000;247.5000;238.7000;245.7000;241.4000;244.7000;235.6000;242.7000;239.1000;226.0000];
fs10 = [10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10;10];
holes12and13 = table(holeid,depth,rop,fs10);
fs = 10;
G = findgroups(holes12and13.holeid);
holenames = unique(holes12and13.holeid);
[y1,ty1] = splitapply(@(r,d)func(r,d,fs), holes12and13.rop, holes12and13.depth,G);
rop = table(y1{:});
depth = table(ty1{:});
rop = [rop.Var1;rop.Var2];
depth = [depth.Var1;depth.Var2];
resampledholes = table(depth,rop)
resampledholes = 22×2 table
depth rop _____ ______ 0 112.92 0.1 169.26 0.2 165.68 0.3 174.99 0.4 194.7 0.5 194.14 0.6 118.92 0.7 152.21 0.8 178.49 0.9 163.01 1 145.43 0 145.21 0.1 111.84 0.2 117.65 0.3 219.21 0.4 189.16
function [y,yt] = func(yg,t,fs);
[ty,tyt] = resample(yg,t,fs);
y = {ty}; yt = {tyt};
end

Respuesta aceptada

Simon Chan
Simon Chan el 7 de En. de 2022
Try this:
[G,name] = findgroups(holes12and13.holeid); % Store the extracted hold id
%
[y1,ty1] = splitapply(@(r,d)func(r,d,fs), holes12and13.rop, holes12and13.depth,G);
rop = table(y1{:});
depth = table(ty1{:});
rop = [rop.Var1;rop.Var2];
depth = [depth.Var1;depth.Var2];
%
resampledholes = table(name(G),depth,rop) % Put the hold id in the 1st column
resampledholes.Properties.VariableNames(1)=holes12and13.Properties.VariableNames(1) % Re-name the VariableName
  3 comentarios
Simon Chan
Simon Chan el 7 de En. de 2022
If the data are arranged in the ascending order of holeid, then you may manually assign it in the 1st column because all holeid has 11 data after resampling.
resampledholes = table(repelem(name,11,1),depth,rop)
However, if the data are arranged randomly, then you may need to track them using index or sort them before performing resampling.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Language Fundamentals en Help Center y File Exchange.

Productos


Versión

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by