ajouter des lignes basées sur les valeurs d'une colonne dans la même table de donnéesChers tous,
J'ai un tableau de données contenant les colonnes d'ID, de données de la dernière inspection et de décision de la dernière inspection. Je souhaite combiner la dernière colonne de données d'inspection avec la dernière décision d'inspection afin d'avoir une colonne (empilée) à utiliser dans l'analyse d'association. Par exemple, un cluster de ma structure de données ressemble à ceci :
ID Décision de la dernière inspection Données de la dernière inspection
101 DÉFAUT DES SPÉCIFICATIONS DU PRODUIT
101 Écarts CGMP
101 21 CFR 211.113
101 VAI LIQ_US
Je voudrais déplacer la décision de la dernière inspection, dans ce cas VAI, sous la colonne Données de la dernière inspection et créer une nouvelle ligne ayant le même ID, dans ce cas 101. Par conséquent, j'ai besoin que mes données empilées ressemblent à :
ID Dernières données d'inspection
101 DÉFAUT DES SPÉCIFICATIONS DU PRODUIT
101 Écarts CGMP
101 21 CFR 211.113
101 LIQ_US
101 VA
De plus, certains de ces identifiants sont répétés mais avec une valeur différente dans une ou plusieurs des données de dernière inspection. Par exemple, Lab DEFECT peut être un autre problème pour le même ID, je crée donc un autre cluster de lignes chaque fois que l'une de ces valeurs diffère de la précédente.
ID Décision de la dernière inspection Données de la dernière inspection
101 DÉFAUT du laboratoire
101 Écarts CGMP
101 21 CFR 211.113
101 VAI LIQ_US
Merci beaucoup pour votre aide à l'avance.
Meilleur,
Qaïs
Re : ajouter des lignes basées sur les valeurs d'une colonne dans la même table de donnéesJe ne suis pas sûr d'avoir bien compris, mais voici une alternative. Si c'est ce que vous voulez, vous devez également voir dans quelle mesure il évoluera.
NamesDefaultToHere(1);
// Example table . . .
dt = New Table( "Inspection",
Add Rows( 10 ),
New Column( "ID",
Character,
"Nominal",
Set Values(
{"101", "101", "101", "101", "102", "102", "102", "101", "101", "101"}
)
),
New Column( "Last Inspection Decision",
Character,
"Nominal",
Set Values( {"", "", "", "VAI", "", "", "Code 1", "", "", "Code 2"} )
),
New Column( "Last Inspection Data",
Character,
"Nominal",
Set Values(
{"PRODUCT SPECIFICATIONS DEFECT", "CGMP Deviations", "21 CFR 211.113",
"LIQ_US", "PRODUCT SPECIFICATIONS DEFECT", "21 CFR 211.113", "LIQ_US",
"PRODUCT SPECIFICATIONS DEFECT", "CGMP Deviations", "21 CFR 211.113"}
)
)
);
// Copy the table
dt2 = Eval(dt << getScript);
dt2 << setName(dt << getName ||" Stacked");
// Get the values from the two columns of interest into lists
ids = Column(dt2, "ID") << getValues;
vals = Column(dt2, "Last Inspection Data") << getValues;
// Find out where we need to insert new values, get the required values, and insert them into the right positions
insertAfter = dt2 << getRowsWhere(!IsMissing(:Last Inspection Decision));
for(r=1, r<= NItems(insertAfter), r++,
InsertInto(ids, Column(dt2, "ID")[insertAfter[r]], insertAfter[r] + r);
InsertInto(vals, Column(dt2, "Last Inspection Decision")[insertAfter[r]], insertAfter[r] + r);
);
// Add rows to teh copy of the table, insert the column values, and delete the column we don't need
dt2 << addRows(NRows(insertAfter));
Column(dt2, "ID") << setValues(ids);
Column(dt2, "Last Inspection Data") << setValues(vals);
dt2 << deleteColumns(:Last Inspection Decision);
Re : ajouter des lignes basées sur les valeurs d'une colonne dans la même table de donnéesSalut,
Cela ne fonctionne pas car j'ai plus de 100 000 lignes. J'ai essayé de diviser mes données en trois parties, chacune comportant près de 35 000 lignes, mais cela ne fonctionne pas. Toute suggestion?
Meilleur,
Qaïs
Re : ajouter des lignes basées sur les valeurs d'une colonne dans la même table de donnéesCe n'est pas la solution la plus robuste, mais essayez-la :
dt = current data table ();
for each row( if(!is missing (:Last Inspection Decision),
dt << add rows(1, row()),
is missing (:Last Inspection Data), :Last Inspection Data[row()] = :Last Inspection Decision[row()-1])
);