Effacer les filtres
Effacer les filtres

splitting column in table without creating new variables

1 vue (au cours des 30 derniers jours)
Nona
Nona le 9 Juin 2021
Commenté : Nona le 10 Juin 2021
I have continous data with 100 datapoints for each variable in each trial (100 datapoints of a time series). Every trial of one variable is added in the same column of the table with a second column specifying the trial number and a third column specifying the session number.
I want to average the datapoints of the different trials now, always averaging each data point with theoretically the same index if they were seperate vectors, ergo datapoint 1 of all trials, then datapoint 2 of all trials and so on. Then I want to save the average and mean as columns into a new table.
Is there a way to do this with indexing in the table directly and without creating individual vectors for each trial again?
So far I have been doing it this way, but I imagine there must be a more efficient way of doing it as I have many variables and trials and participants and it would take up a lot of space writing it out like this.
x1 = alltrials.Var1(alltrials.TrialNo==1);
x2 = alltrials.Var1(alltrials.TrialNo==2);
x3 = alltrials.Var1(alltrials.TrialNo==3);
average = table(x1, x2, x3);
average.mean = mean([average.x1 average.x2 average.x3],2);
average.median = median([average.x1 average.x2 average.x3],2);
avgtrials.Var1_mean = average.mean;
avgtrials.Var1_median = average.median;

Réponse acceptée

Duncan Po
Duncan Po le 9 Juin 2021
Unstack may be the function you need to convert your table into a column for each trial, and then use braces indexing to convert the table into an array. See this example:
allTrials = table(rand(12,1),repelem((1:3)',4,1), repmat((1:4)',3,1), 'VariableNames', {'Var1', 'TrialNo', 'SessionNo'});
head(allTrials,6)
ans =
6×3 table
Var1 TrialNo SessionNo
_______ _______ _________
0.70936 1 1
0.75469 1 2
0.27603 1 3
0.6797 1 4
0.6551 2 1
0.16261 2 2
t = unstack(allTrials, "Var1", "TrialNo", "VariableNamingRule", "preserve");
t.mean = mean(t{:,2:end},2);
t.median = median(t{:,2:end},2);
head(t)
ans =
4×6 table
SessionNo 1 2 3 mean median
_________ _______ _______ _______ _______ _______
1 0.70936 0.6551 0.95974 0.77474 0.74205
2 0.75469 0.16261 0.34039 0.41923 0.37981
3 0.27603 0.119 0.58527 0.32676 0.30139
4 0.6797 0.49836 0.22381 0.46729 0.48283

Plus de réponses (0)

Catégories

En savoir plus sur Tables dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by