How to organize a table?
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Zeynab Mousavikhamene
il 16 Ago 2019
Modificato: Andrei Bobrov
il 16 Ago 2019
I have a table around 700 rows and 7 columns. The second column is time. I have 5 different times. The last column is "cell type" which is an integer from 0 to 4. I need to know that at time=0 how many "cell type=3" exists? how many "cell type=4" exists? and do this for all times.
Is varfun appicable in this case?
Thanks
3 Commenti
Risposta accettata
Jon
il 16 Ago 2019
Modificato: Jon
il 16 Ago 2019
You could do this with a simple loop I'll assume your table is called mytable
% find maximum possible value for cell type
cellTypeMax = max(mytable.cell_type)
% find the row numbers of all the rows with time = 0
irow = mytable.time == 0
% loop through the rows at time zero counting number of each occurence
count = zeros(cellTypeMax,1); % preallocate
for k = 1:cellTypeMax
count(k) = sum(mytable.cell_type(irow)==k)
end
You could also get fancier and eliminate the loop using histcounts (or histc in earlier versions)
% find maximum possible value for cell type
cellTypeMax = max(mytable.cell_type)
% find the row numbers of all the rows with time = 0
irow = mytable.time == 0
% define bin edges assume that cell types start at 1
edges = [0.5:1:cellTypeMax+1];
% count occurences within rows that are at time zero
count = histcounts(mytable.cell_type(irow),edges)
0 Commenti
Più risposte (2)
Andrei Bobrov
il 16 Ago 2019
Modificato: Andrei Bobrov
il 16 Ago 2019
T = readtable('img1.txt');
out = varfun(@sum,T,'GroupingVariables',...
{'time','cell_type'},'InputVariables','cell_type');
out = out(:,1:end-1);
or
[A,out] = findgroups(T(:,{'time','cell_type'}));
out.counts = accumarray(A,1);
0 Commenti
Vedere anche
Categorie
Scopri di più su Matrices and Arrays in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!