How to generate joint frequency table?

Dear experts,
I have two vectors and I want to make a joint frequency table, I tried tabulate but failed, I was wondering what is wrong with my code, and if there is any other code can help me do this?
Many thanks!
Below is the code I tried:
% Two vectors
Attribute
Assignment_result
% Combine them together
data=table(Attribute,Assignment_result)
% Tabulate
joint_freq=tabulate(data.Attribute,data.Assignment_result)
disp(joint_freq)
But matlab suggests 'too many input arguments'

3 个评论

The tabulate function just provides frequencies for one variable, it ony accepts one vector as an argument. This is why you get the error "too many input arguments". Please provide the data that you wish to find the joint frequency of for further guidance.
tabulate() accepts only 1 input, whereas you are giving 2 inputs to it.
What are you trying to do? Calculating the frequency of 1 vector w.r.t to other?
In any case, please attach your data (use the paperclip icon to do so), and mention the output you want to obtain.
Thank you Jon and Dyuman Joshi!

请先登录,再进行评论。

 采纳的回答

It isn't perfectly clear what you mean, but I think this does what you intend.
% Set the seed, for reproduciblity
rng default
% Two example vectors
vector1 = randi([1, 3], 5, 1);
vector2 = randi([1, 3], 5, 1);
% Combine the vectors into a matrix
data = [vector1, vector2]
data = 5×2
3 1 3 1 1 2 3 3 2 3
% Unique rows and their indices
[unique_rows, ~, row_indices] = unique(data, 'rows');
% Frequency of each unique row
freq = histcounts(row_indices, 1:size(unique_rows,1)+1);
% Combine the unique rows and their frequencies into a table
freq_table = table(unique_rows, freq', 'VariableNames', {'UniqueRows', 'Frequency'})
freq_table = 4×2 table
UniqueRows Frequency __________ _________ 1 2 1 2 3 1 3 1 2 3 3 1

3 个评论

Thank you so much!
I was further wondering if it is possible to make the table in the following format?
Thanks again!
Ah, you want a cross table:
% Set the seed, for reproduciblity
rng default
% Two example vectors
vector1 = randi([1, 3], 5, 1);
vector2 = randi([1, 3], 5, 1);
[tbl,chi2,p,labels] = crosstab(vector1,vector2)
tbl = 3×3
0 1 0 0 0 1 2 0 1
chi2 = 6.6667
p = 0.1546
labels = 3×2 cell array
{'1'} {'1'} {'2'} {'2'} {'3'} {'3'}
This is exactly what I am looking for, thank you so much!

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Programming 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by