Salut,
Je souhaite supprimer toutes les colonnes contenant "pomme" et supprimer toutes les lignes (quelles que soient les colonnes) avec la valeur spécifique -9999. J'ai dû démarrer le code pour supprimer la colonne mais je n'y arrive pas.
Merci.
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" );Il s'agit d'un changement très simple du script.Toutes les options spéciales pour la saisie des données peuvent être supprimées.La fonction Open() utilisera simplement les valeurs par défaut.
Deuxièmement, tout ce qui doit être fait pour les suppressions de lignes est de rechercher une valeur de chaîne de "-9999" lorsqu'il est déterminé que la colonne d'entrée est de nature caractère.
les noms sont par défaut Here(1);
dt=Ouvert(
"fichier (3).csv");
// Crée une liste dans laquelle placer les colonnes à supprimer
delList = {};
Pour( i = 1, i<= N Cols(dt), i++,
Si( Contient( Majuscules( as Column( i ) << obtenir le nom ), "APPLE" ) > 0,
insérer dans (delList, colonne (i)< )
);
dt << supprimer les colonnes (delList);
// Parcourez les données et supprimez toutes les lignes qui ont
// la valeur -9999 dans l'une des colonnes
Pour( i = 1, i <= N Cols( dt ), i++,
Si( Colonne( dt, i ) << get datatype == "Numérique",
dt << sélectionner où ( Comme colonne ( dt, i ) == -9999 ),
dt << sélectionner où (Contient (As Column (dt, i), "-9999" ) == 1 |
Contient (Comme Colonne (dt, i), "99" ) == 1
)
);
Si (N lignes (dt << obtenir les lignes sélectionnées) > 0,
dt << supprimer les lignes
);
);
Jim,
Le code fonctionne.
Quand j'utilise le "|" tuyau. Cela créera des colonnes supplémentaires.
Je ne veux pas d'en-tête de colonne supplémentaire dans ce cas, ce sera "12" colonnes au total.
Mais dans chaque colonne, je peux avoir plusieurs données de canal. Je ne me soucie que de la première valeur et ignore le reste.
Exemple:
"99|23|abc|x", je ne me soucie que de "99" et j'ignore le reste.
"-9999|123", je ne me soucie que de "-9999" et cette ligne sera supprimée plus tard.
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
Voici un script qui fera ce que vous voulez.Quelques points sur le script :
1. La fonction Open() a le "|" ajouté comme délimiteur en plus du ",".Cela a été facilement créé en utilisant « Aperçu des données » lors de l'ouverture du fichier .csv.Il permettait de sélectionner des caractères supplémentaires à utiliser comme délimiteurs.Ensuite, tout ce qu'il restait à faire était d'ouvrir le fichier, puis d'accéder à l'entrée Source dans le panneau Tableaux, de le modifier et de copier le code source créé par JMP pour ouvrir le fichier.
2. La suppression des colonnes contenant Apple a dû être généralisée, car dans une colonne, il était écrit Apple et dans une autre colonne, il était écrit Apple.
3. Je ne pense vraiment pas que vous devriez supprimer une ligne complète, en fonction de la découverte d'une occurrence de -9999.Je pense vraiment que vous devriez simplement définir la valeur -9999 sur une valeur manquante.J'ai inclus un morceau de code qui peut gérer vos données de cette façon, si vous le souhaitez.
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>