Filtering down a readtable based on specific value in a column
40 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Trevor Palmer
le 31 Juil 2021
Commenté : Trevor Palmer
le 31 Juil 2021
I have a running table of stats from a game with friends and I want to pull only the first place placements into a new table. Essentially, I want to take RawBonusStars(i,:), the entire ith row and place it into BonusStars(i,:). In this dropped row I would have 10 variables, (1 & 3:10) are just numbers or NaN and the 2nd column would be the players name.
This is what my current code looks like and it returns an error: "Conversion to double from cell is not possible"
stats = 'Mario party tracker.csv'
T = readtable(stats);
games = (unique(T.Game_));
rows = height(T)/4;
RawBonusStars = [T(:,game),(T(:,names)),T(:,placement),T(:,MiniGame),T(:,MaxCoin),T(:,Happening),T(:,Orb),T(:,Shopping),T(:,Running),T(:,RedSpaceStar)];
BonusStars = array2table(zeros(height(games),10));
for i=1:rows
if RawBonusStars.Placement(i) ==1
BonusStars(i,:) = RawBonusStars(i,:)
end
end
I tried to pin point the problem down and I suspect its due to the "name" row. Both RawBonusStars and BonusStars should be initalized as tables so im not sure what the issue is.
6 commentaires
Cris LaPierre
le 31 Juil 2021
What exactly is the issue you are having? There are errors in the code well before the actual assignment operation.
Réponse acceptée
Image Analyst
le 31 Juil 2021
"take a table that is currently 248 x 10 and filter it down to a table that is 61 x 10" OK then did you want to filter based on Placement:
stats = 'Mario party tracker.csv'
T = readtable(stats);
rowsToExtract = T.Placement == 1;
T2 = T(rowsToExtract, :)
fprintf('Done running %s.m.\n', mfilename);
Plus de réponses (2)
Image Analyst
le 31 Juil 2021
Did you mean this?
RawBonusStars = table(T.Game_, T.Name,T.Placement,T.MinigameCoins, T.Coins,T.HappeningSpaces,T.Orbs,T.ShoppingMoney,T.Running,T.RedSpaces)
2 commentaires
Cris LaPierre
le 31 Juil 2021
Could also be
RawBonusStars = T(:,["Game_","Name","Placement","MinigameCoins","MaxCoins","HappeningSpaces","Orbs","ShoppingMoney","Running","BonusRedStar"]);
but we are guessing what variables were intended to be included
Cris LaPierre
le 31 Juil 2021
Modifié(e) : Cris LaPierre
le 31 Juil 2021
Assuming we are missing some of the code (all the column numbers used to construct RawBonusStars, I believe your issue with the actual assignment is a typo.
BonusStars(i,:) = RawBounsStars(i,:)
^^^ % should be RawBonusStars
2 commentaires
Cris LaPierre
le 31 Juil 2021
It looks like you had 62 games, not 61. Use logical indexing to extract all the first place finishers. No loop needed.
stats = 'Mario party tracker.csv'
T = readtable(stats);
RawBonusStars = ["Game_","Name","Placement","BonusMinigameStar","BonusMaxCoin","BonusHappening","BonusOrbStar","BonusShoppingStar","BonusRunnerStar","BonusRedStar"];
ind = T.Placement == 1;
BonusStars = T(ind,RawBonusStars)
Voir également
Catégories
En savoir plus sur Environment and Settings 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!