Effacer les filtres
Effacer les filtres

How to duplicate certain rows of a dataset (class = dataset)?

2 vues (au cours des 30 derniers jours)
George McFadden
George McFadden le 17 Oct 2012
I have a dataset with 200 rows and 20 columns. I want to duplicate each row that has a depth value of 10, e.g. dataset.depth == 10, and place the duplicate row in the next row. (The reason for duplication is because I will change values in 2 of the columns of this duplicated row, but most of the column values will remain the same.) I am thinking that a for loop with an if/else statement could work.
for i=1:length(dataset.depth)
if dataset.depth(i) == 10
DUPLICATE COMMAND HERE NEEDED
end
end
Thanks!
  2 commentaires
José-Luis
José-Luis le 17 Oct 2012
Modifié(e) : José-Luis le 18 Oct 2012
I don't really understand how your data is organized. As I understand it, you have an array of structures and one of the fields is depth. In that case what do you mean by repeating rows? Or is the depth one of the columns in your matrix?
George McFadden
George McFadden le 23 Oct 2012
Jose-Luis, I am using a dataset array, so not a structure. Thanks for your interest, I ended up using the following code:
for i=1:286
if aa.depth(i) == 10
aa = [aa;aa(i,:)];
aa=sortrows(aa,{'dpID','depth'});
aa(i+1,7) = dataset(0);
aa(i+1,12) = dataset(x);
i = i + 1;
end
end
Straight forward code, the important lines being aa = [aa;aa(i,:)]; which duplicates the line at i and appends to end of list; and the other important line being i = i +1, this avoids the loop duplicating the same row infinitely.
Thanks!

Connectez-vous pour commenter.

Réponses (2)

Matt J
Matt J le 17 Oct 2012
Modifié(e) : Matt J le 17 Oct 2012
No need to use for-loops at all:
B=num2cell(A,2).'; %A is 200x20
B=[B;B];
B(2,dataset.depth~=10)={[]};
newmatrix = vertcat(B{:});

Peter Perkins
Peter Perkins le 23 Oct 2012
As Matt says, no need to use loops. This might be a little simpler.
First cook up some data:
aa = dataset((1:100)',randi(10,100,1),randn(100,1),'VarNames',{'dpID' 'depth' 'somethingElse'});
Then find the rows to duplicate, and put duplicates at the end:
i = (aa.depth == 10);
Then sort to put duplicates in place:
aa = sortrows([aa; aa(i,:)],'dpID');
Hope this helps.

Catégories

En savoir plus sur Data Types 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