find duplicate values using accumarray() function:

2 vues (au cours des 30 derniers jours)
Nadir  Adam
Nadir Adam le 19 Avr 2018
Commenté : Nadir Adam le 23 Avr 2018

I have data that contains longitude,latitude,access point address and signal level. I would like to find duplicate longitude,latitude,access point address, then average the signal level over them, and then replacing the original rows with the new single row. How to do this?

For example (made up data):

Starting data:

if true
33.121,-70.630,aa:91:52:9c:72:21,-80
33.122,-70.631,bb:91:52:9c:72:21,-75
33.123,-70.632,cc:91:52:9c:72:21,-84
33.124,-70.633,dd:91:52:9c:72:21,-57
33.121,-70.630,aa:91:52:9c:72:21,-84
33.122,-70.631,bb:91:52:9c:72:21,-73
end

Would become

if true
33.121,-70.630,aa:91:52:9c:72:21,-82
33.122,-70.631,bb:91:52:9c:72:21,-74
33.123,-70.632,cc:91:52:9c:72:21,-84
33.124,-70.633,dd:91:52:9c:72:21,-57
end
  1 commentaire
the cyclist
the cyclist le 19 Avr 2018
How are your data currently stored (e.g. what data type)? Can you post the data, or a small sample that has duplicates?

Connectez-vous pour commenter.

Réponse acceptée

Razvan Carbunescu
Razvan Carbunescu le 19 Avr 2018

Using accumarray specifically you could do this by combining with findgroups :

[idx,unique_long,unique_lat,unique_acc] = findgroups(long,lat,acc);
[unique_signal] = accumarray(signal,idx,[],@mean);

In R2018a could also use groupsummary but the data should be in a table:

T = table(long,lat,acc,signal);
GT = groupsummary(T,{'long','lat','acc'},'mean','signal')

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by