Daten-QS und NeuformatierungHallo zusammen,
Ein häufiges Verlangsamungsverfahren in meinem Workflow besteht darin, dass ein Client uns eine Tabelle mit Ergebnissen sendet, die '<0,01' oder eine andere beliebige Zahl für Proben enthalten, die unterhalb einer Nachweisgrenze liegen. Wir haben einen internen R-Code, der die Imputation für diese Werte berechnet, aber wir müssen den Datensatz neu formatieren (Beispiel hier beigefügt). Aus der Datei müssen zwei separate CSVs erstellt werden, eine mit Nichterkennungen, die durch Null ersetzt wurden (Erkennungsdatei angehängt), und eine andere, bei der alle Werte Nullen sind und die Nichterkennungen durch die Erkennungsgrenze ohne das Symbol '<' ersetzt werden (Angehängte Datei nicht erkennen).
Weiß jemand, wie man diesen Prozess automatisiert, um diese beiden CSVs aus dem Datensatz zu erstellen? Würde mich freuen, wenn JMP über diese Funktionalität verfügt oder wenn jemand ein allgemeines Skript bereitstellen könnte.
SkriptingBetreff: Daten-QS und NeuformatierungDies ist eine ziemlich einfache Aufgabe für JMP. Führen Sie diesen Code aus (nachdem Sie die Abschnitte bearbeitet haben) und prüfen Sie, ob er Ihnen das bietet, was Sie möchten. Dann müssen Sie in die JMP-Dokumentationsbibliothek gehen und das Skripthandbuch lesen, damit Sie verstehen, was der folgende Code tut
Names Default To Here( 1 );
// Open the Excel spreadsheet that has the issues
dt = Open( "<YOUR path="">\Sample Client Data.xlsx" );
// Get all of the character columns
colNames = dt << get column names( string, character );
// Go across all of the character columns, and if "<0.0" is found in one
// or more cells, then change those cells to 0. Then convert the column
// to a numeric column
For( i = 1, i <= N Items( colNames ), i++,
dt << select where( Contains( As Column( colNames[i] ), "<0.0" ) );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
Column( dt, colNames[i] )[selRows] = "0";
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
// Save the Detect version of the data
dt << save( "<YOUR path="">\Detect.csv" );
Close( dt, nosave );
// Reopen the Excel spreadsheet that has issues
dt = Open( "<YOUR path="">\Sample Client Data.xlsx" );
// Get all of the character columns
colNames = dt << get column names( string, character );
// Go across all of the character columns, and if "<0.0" is found in one
// or more cells, then loop through the cells getting rid of the "<"
// Then convert the column to a numeric column
For( i = 1, i <= N Items( colNames ), i++,
dt << select where( Contains( As Column( colNames[i] ), "<0.0" ) );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
For( k = 1, k <= N Rows( selRows ), k++,
theRow = selRows[k];
Column( dt, colNames[i] )[theRow] = Substr( Column( dt, colNames[i] )[theRow], 2 );
);
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
// Save the NonDetect version of the data
dt << save( "<YOUR path="">\NonDetect.csv" );
Close( dt, nosave );</YOUR></YOUR></YOUR></YOUR>
Betreff: Daten-QS und NeuformatierungHallo Jim,
Ich habe mir das angesehen und es fehlt der zweite Teil der Aufgabe. Wir benötigen ein Skript für 'Non Detect', um auch alle Werte in Nullen zu ändern.
Ich möchte die Schleife ausführen und alle Zellen mit Werten> 0 auswählen (ausgenommen diejenigen mit DL-Werten "<0.0").
Der letzte Teil des Codes, den Sie gesendet haben, funktioniert hervorragend. Ich muss nur 'NonDetectPreprocess.csv' einfügen.
Ich habe versucht, dieses benutzerdefinierte Skript zu verwenden, das ich erstellt habe:
// Reopen the Excel spreadsheet that has issues
dt = Open( "D:\MD\Datto Workplace\Projects\Internal\JMP Scripts\Zero Imputation\Fake Client Data.csv" );
// Go across all of the character columns, and if concentration is greater than zero is found in one
// or more cells, then change those cells to 0. Then convert the column
// to a numeric column
For( i = 1, i <= N Items( colNames ), i++,
dt << select where( dt > 0 );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
Column( dt, colNames[i] )[selRows] = "0";
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
//Save this sheet for next step
dt << save("D:\MD\Datto Workplace\Projects\Internal\JMP Scripts\Zero Imputation\NonDetectPreprocess.csv" )
Close( dt, nosave );</CODE></PRE><P> </P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-288098" slang="en-US">Betreff: Daten-QS und Neuformatierung</LINGO-SUB><LINGO-BODY id="lingo-body-288098" slang="en-US"><P>Guter Versuch ... aber ich denke, das ist was du willst</P>
<PRE><CODE class=" language-jsl">// Reopen the Excel spreadsheet that has issues
dt = Open( "<YOUR path="">\Sample Client Data.xlsx" );
// Get all of the character columns
colNames = dt << get column names( string, character );
// Go across all of the character columns, and if "<0.0" is found in one
// or more cells, then loop through the cells getting rid of the "<"
// Then convert the column to a numeric column
For( i = 3 i <= N Items( colNames ), i++,
dt << select where( ! Contains( As Column( colNames[i] ), "<0.0" ) );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
column( dt, colNames[i] )[selRows] = "0";
);
dt << invert row selection;
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
For( k = 1, k <= N Rows( selRows ), k++,
theRow = selRows[k];
Column( dt, colNames[i] )[theRow] = Substr( Column( dt, colNames[i] )[theRow], 2 );
);
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
// Save the NonDetect version of the data
dt << save( "<YOUR path="">\NonDetect.csv" );
Close( dt, nosave );</YOUR></YOUR>
Betreff: Daten-QS und NeuformatierungHallo Jim,
Mir ist aufgefallen, dass Sie eine umgekehrte Zeilenauswahl getroffen haben. Obwohl dies hilfreich ist, besteht das Problem darin, dass nur die Spalten ausgewählt werden, die "<0.0" enthalten. Wie wähle ich alle Spalten aus, deren Datensatz numerische Daten enthält, und ändere diese?
Danke für die Hilfe!
Betreff: Daten-QS und NeuformatierungFolgen Sie einfach einem Foto, wenn das klarer ist. Das Gelb sind die Nachweisgrenzen "<0,0", die ersetzt wurden. Diese Spalten wurden durch Nullen ersetzt, der Rest blieb jedoch unverändert.

Betreff: Daten-QS und NeuformatierungAh, ich sehe das Problem ..... und ich habe das Problem unten behoben ..... Ich glaube. Aber lassen Sie mich zuerst etwas klarstellen. Wenn JMP die verschiedenen Spalten einliest, liest es alle Daten für eine bestimmte Spalte durch und entscheidet, ob die Spalte eine numerische oder eine Zeichenspalte ist. Alle Werte in einer Spalte müssen numerische Werte sein, damit die Spalte als numerisch betrachtet wird. Wenn JMP eine Spalte mit einer nicht numerischen Zelle findet, dh <0,0005, wird die Spalte daher als Zeichenspalte deklariert. Mein Code nutzt dies aus, indem er es dem Code ermöglicht, die Spalten zu finden, in denen ein "<" gefunden wurde. Außerdem kann JSL Zeichenmanipulationsfunktionen wie Substr () verwenden, um das "<" zu entfernen und eine gültige Zahl in der Zelle zu belassen. Sobald jedoch alle "<" entfernt wurden, kann die Spalte in eine numerische Spalte geändert werden. << Datentyp (numerisch). Hier ist mein neuer Code, der alle gefundenen Spalten unmittelbar nach dem Einlesen der Daten und vor der Verarbeitung der "<" - Spalten als numerisch in 0 konvertiert. Ich gehe davon aus, dass Sie alle Werte in einer numerischen Spalte auf 0 ändern möchten, auch wenn es sich um einen negativen Wert handelt. Der Code korrigiert dann die Spalten "<", wodurch alle numerischen Zellen mit Ausnahme der Zellen mit "<" auf 0 geändert werden.
dt = Open( "C:\users\jim\documents\discussion group\Sample Client Data.xlsx" );
// Get all of the character columns
colNames = dt << get column names( string, character );
colNamesNum = dt << get column names( string, numeric );
// zero out all current numeric columns
For( i = 2, i <= N Items( colNamesNum ), i++,
column( dt, colNamesNum[i] )[1::N Rows(dt)] = 0;
);
// Go across all of the character columns, and if "<0.0" is found in one
// or more cells, then loop through the cells getting rid of the "<"
// Then convert the column to a numeric column
For( i = 1, i <= N Items( colNames ), i++,
dt << select where( ! Contains( As Column( colNames[i] ), "<0.0" ) );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
column( dt, colNames[i] )[selRows] = "0";
);
dt << invert row selection;
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
For( k = 1, k <= N Rows( selRows ), k++,
theRow = selRows[k];
Column( dt, colNames[i] )[theRow] = Substr( Column( dt, colNames[i] )[theRow], 2 );
);
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
// Save the NonDetect version of the data
dt << save( "<YOUR path="">\NonDetect.csv" );
Close( dt, nosave );</YOUR>