Hallo,
Ich möchte alle Spalten löschen, die „apple“ enthalten, und alle Zeilen (unabhängig von den Spalten) mit dem spezifischen Wert -9999 löschen. Ich hatte den Code zum Löschen der Spalte gestartet, bekomme ihn aber nicht hin.
Danke.
dt = Open("file.csv");
//dt = Open( "$SAMPLE_DATA/Cities.jmp" );
col_list = dt << get column names( string );
For( i = N Items( col_list ), i > 0, i--,
If(Contains( col_list[i], "apple" ),
Remove From( col_list, i ),
)
);
//dt << Select Where( );
//dt << Delete Rows;
dt << save( "testOUT.txt" );Es ist eine sehr einfache Änderung am Skript.Sämtliche Sonderoptionen zur Eingabe der Daten können entfallen.Die Open()-Funktion verwendet nur die Standardeinstellungen.
Zweitens muss bei den Zeilenlöschungen lediglich nach einem Zeichenfolgenwert „-9999“ gesucht werden, wenn festgestellt wird, dass die Eingabespalte zeichenartig ist.
Namen sind standardmäßig Here(1);
dt=Offen(
„Datei (3).csv“);
// Erstellen Sie eine Liste, in der die zu löschenden Spalten platziert werden
delList = {};
For( i = 1, i<= N Cols(dt), i++,
If( Enthält( Großbuchstaben( as Column( i ) << get name ), "APPLE" ) > 0,
einfügen in(delList, Spalte(i)< )
);
dt << Spalten löschen( delList);
// Durchlaufen Sie die Daten und löschen Sie alle Zeilen, die vorhanden sind
// der Wert -9999 in einer der Spalten
For( i = 1, i <= N Cols( dt ), i++,
If( Column( dt, i ) << get datatype == "Numeric",
dt << select where( As Column( dt, i ) == -9999 ),
dt << select where( Contains( As Column( dt, i ), "-9999" ) == 1 |
Enthält( As Column( dt, i ), "99" ) == 1
)
);
If( N Rows( dt << get selected rows ) > 0,
dt << Zeilen löschen
);
);
Jim,
Der Code funktioniert.
Wenn ich das „|“ verwende Rohr. Es werden zusätzliche Spalten erstellt.
Ich möchte in diesem Fall keine zusätzliche Spaltenüberschrift, es sind insgesamt „12“ Spalten.
Aber in jeder Spalte kann ich mehrere Pipe-Daten haben. Ich interessiere mich nur für den ersten Wert und ignoriere den Rest.
Beispiel:
„99|23|abc|x“, ich interessiere mich nur für „99“ und ignoriere den Rest.
„-9999|123“, ich interessiere mich nur für „-9999“ und diese Zeile wird später gelöscht.
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 -9999|999|231 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1|xyz|abc 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 -9999 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 99|23|abc|x 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
-9999|123 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1 1 1 2 30 40 1 10 99
1 1 1 1|87 1 -9999 2 30 40 1 10 99
Hier ist ein Skript, das das tut, was Sie wollen.Ein paar Punkte zum Skript:
1. Die Open()-Funktion hat das „|“ als Trennzeichen zusätzlich zum "," hinzugefügt.Dies konnte einfach mithilfe der „Datenvorschau“ beim Öffnen der CSV-Datei erstellt werden.Es ermöglichte die Auswahl zusätzlicher Zeichen als Trennzeichen.Dann mussten Sie nur noch die Datei öffnen, dann im Tabellenfenster zum Eintrag „Quelle“ gehen, ihn bearbeiten und den Quellcode kopieren, den JMP zum Öffnen der Datei erstellt hat.
2. Die Löschung der Spalten mit dem Wort „Apple“ musste verallgemeinert werden, da in einer Spalte „Apple“ und in einer anderen Spalte „Apple“ geschrieben wurde.
3. Ich glaube wirklich nicht, dass Sie eine komplette Zeile löschen sollten, wenn Sie ein Vorkommen von -9999 finden.Ich denke wirklich, dass Sie einfach den Wert -9999 auf einen fehlenden Wert setzen sollten.Ich habe einen Code eingefügt, der Ihre Daten auf diese Weise verarbeiten kann, wenn Sie möchten.
names default to Here(1);
dt=Open(
"file.csv",
columns(
New Column( "a", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "b", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "c", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "d", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "e", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "g", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "apple", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "orange", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "candy", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "pizza", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Apple2_2", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "orange2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, Other( "|" ), CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
// Create a list to place columns to be deleted into
delList = {};
For( i = 1, i<= N Cols(dt), i++,
If( Contains( Uppercase( as Column( i ) << get name ), "APPLE" ) > 0,
insert into(delList, column(i)<<GET name=""> 0,
dt << delete rows
);
)
);
/*// Substitute the code below for the last For Loop in the above
// script, if what you want to do is to just change the -9999
// values to missing values
For( i = 1, i <= N Cols( dt ), i++,
If( Column( dt, i ) << get datatype == "Numeric",
dt << select where( As Column( dt, i ) == -9999 );
If( N Rows(dt << get selected rows) > 0,
column(dt,i)[dt << get selected rows] = .;
);
)
);*/</GET>