Fügen Sie Zeilen basierend auf Spaltenwerten in derselben Datentabelle hinzuVerehrte Gäste,
Ich habe eine Datentabelle, die die Spalten ID, letzte Inspektionsdaten und letzte Inspektionsentscheidung enthält. Ich möchte die letzte Inspektionsdatenspalte mit der letzten Inspektionsentscheidung kombinieren, um eine (gestapelte) Spalte für die Assoziationsanalyse zu haben. Ein Cluster meiner Datenstruktur sieht beispielsweise wie folgt aus:
ID Letzte Inspektionsentscheidung Letzte Inspektionsdaten
101 PRODUKTSPEZIFIKATIONEN DEFEKT
101 CGMP-Abweichungen
101 21 CFR 211.113
101 VAI LIQ_US
Ich möchte die letzte Inspektionsentscheidung, in diesem Fall VAI, in die Spalte „Letzte Inspektionsdaten“ verschieben und eine neue Zeile mit derselben ID erstellen, in diesem Fall 101. Daher benötige ich, dass meine gestapelten Daten wie folgt aussehen:
ID letzte Inspektionsdaten
101 PRODUKTSPEZIFIKATIONEN DEFEKT
101 CGMP-Abweichungen
101 21 CFR 211.113
101 LIQ_US
101 VAI
Darüber hinaus werden einige dieser IDs in einem oder mehreren der letzten Inspektionsdaten wiederholt, jedoch mit unterschiedlichem Wert. Beispielsweise kann „Lab DEFECT“ ein weiteres Problem für dieselbe ID darstellen, daher erstelle ich immer dann einen weiteren Zeilencluster, wenn einer dieser Werte vom vorherigen abweicht.
ID Letzte Inspektionsentscheidung Letzte Inspektionsdaten
101 Labordefekt
101 CGMP-Abweichungen
101 21 CFR 211.113
101 VAI LIQ_US
Vielen Dank für Ihre Hilfe im Voraus.
Am besten,
Qais
Betreff: Fügen Sie Zeilen basierend auf Spaltenwerten in derselben Datentabelle hinzuIch bin mir nicht sicher, ob ich es richtig verstanden habe, aber hier ist eine Alternative. Wenn es Ihren Wünschen entspricht, müssen Sie auch sehen, wie gut es skalierbar ist.
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);
Betreff: Fügen Sie Zeilen basierend auf Spaltenwerten in derselben Datentabelle hinzuHallo,
Es funktioniert nicht, da ich mehr als 100.000 Zeilen habe. Ich habe versucht, meine Daten in drei Teile mit jeweils fast 35.000 Zeilen aufzuteilen, aber es funktioniert nicht. Irgendein Vorschlag?
Am besten,
Qais
Betreff: Fügen Sie Zeilen basierend auf Spaltenwerten in derselben Datentabelle hinzuDies ist nicht die robusteste Lösung, aber probieren Sie es aus:
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])
);