#NOTE: always keep ID in first column curvesToCoeffs = function(series, wf) { library(wavelets) L = length(series[1,]) D = ceiling( log(L-1) ) nb_sample_points = 2^D #TODO: parallel::parApply() ?! res = apply(series, 1, function(x) { interpolated_curve = spline(1:(L-1), x[2:L], n=nb_sample_points)$y W = wavelets::dwt(interpolated_curve, filter=wf, D)@W nrj_coeffs = rev( sapply( W, function(v) ( sqrt( sum(v^2) ) ) ) ) return ( c(x[1], nrj_coeffs) ) }) return (as.data.frame(res)) } getClusters = function(data, K) { library(cluster) pam_output = cluster::pam(data, K) return ( list( clusts=pam_output$clustering, medoids=pam_output$medoids, ranks=pam_output$id.med ) ) }