How to duplicate certain rows of a dataset (class = dataset)?
Ältere Kommentare anzeigen
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 Kommentare
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
am 23 Okt. 2012
Antworten (2)
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
am 23 Okt. 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.
Kategorien
Mehr zu Variables finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!