Remplir les cellules manquantes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Les tableaux de rapport finissent souvent par avoir des colonnes incomplètes où les étiquettes doivent être copiées dans les cellules séquentielles ci-dessous jusqu'à l'étiquette suivante où le processus est répété encore et encore. L'assistant d'importation d'Excel dispose d'une option pour traiter les étendues de cellules manquantes qui sont fusionnées. Ce script peut être utilisé après l'importation des données et il ne nécessite pas la fusion des étendues des cellules manquantes.
J'utilise ce script, ou des versions de celui-ci, depuis si longtemps que je ne sais pas d'où viennent les os.
Re : Remplir les cellules manquantes@bayesfactor a écrit:
Je dois dire que ce sont des solutions horriblement alambiquées pour ce qui devrait être un 1-liner :
Je suis d'accord qu'il n'y a qu'une seule ligne de code que l'utilisateur doit écrire dans le lien que vous avez fourni, mais la fonction sous-jacente n'est pas un oneliner. Cela est vrai pour la plupart des fonctions faciles à utiliser dans presque tous les langages de programmation, que ce soit R, Python, MATLAB, même en C/C++, ....
Dans le complément des outils de table de données (comme @Byron_JMP mentionné), vous trouverez une fonctionnalité Span Empty Cells, où @brady_brady a créé une telle fonction que vous pouvez utiliser pour faire ce que vous voulez avec une seule commande. Bien que l'outil place la sélection du tableau et des colonnes et tous les paramètres dans une interface. Donc, si vous souhaitez le faire différemment, vous devrez modifier le code source de la fonction afin qu'il prenne les colonnes sélectionnées et accepte une entrée séparée spécifiant la manière d'étendre les cellules.
Au cas où vous voudriez avoir une fonction JSL pour faire cela afin de pouvoir l'incorporer dans d'autres scripts, ce serait une bonne idée de mettre cette requête à la fois dans support@jmp.com et le Liste de souhaits JMP.
L'autre méthode consiste à s'appuyer sur la fonction scriptée de Brady et à modifier la routine à utiliser comme fonction JSL dans un script JSL.
Re : Remplir les cellules manquantesobtenir ce complément (gratuit)
Complément Outils de table de données

presque sûr que l'outil d'étendue des cellules vides fera ce que vous recherchez.
Re : Remplir les cellules manquantesJ'ai un cas où je veux remplir des valeurs de plusieurs colonnes vers l'avant et vers l'arrière dans des morceaux de la table en fonction d'une colonne d'étiquette. Après toute cette discussion, je ne pense pas qu'il existe une manière élégante de le faire - veuillez corriger si je me trompe.
Je dois dire que ce sont des solutions horriblement alambiquées pour ce qui devrait être un 1-liner :
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.fillna.html
Re : Remplir les cellules manquantesSalut,
s'il pourrait y avoir une version plus élégante, ces deux options devraient fonctionner.
Attaché est une table de données comprenant un script tabble faisant ce que vous voulez (je pense). De plus, il existe une colonne avec une formule utilisant l'instruction Match faisant de même. Le script que j'ai utilisé est
Names Default to Here(1);
dt = Current Data Table();
For(i = 1, i <= N Rows(dt), i++,
n = dt << get rows where(:Parameter == "def");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "jkl");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "mno");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "d");
Column("Value")[n] = "NA";
);
Meilleur,
Martin
Re : Remplir les cellules manquantesToujours bloqué à ce stade, ne sachant pas comment continuer.
Toutes les entrées appréciées!
Merci
Re : Remplir les cellules manquantesMerci pour la réponse!
J'essaie d'écrire un script pour cela. Le problème ici est que je pourrais avoir beaucoup plus de colonnes vides. Mais il suffit de vérifier les valeurs de ces 4 colonnes et de remplir avec "NA".
Merci
Re : Remplir les cellules manquantesVoulez-vous un script pour faire cela ? Interactif, vous pouvez utiliser recoder et enregistrer une colonne de formules, ce script de formule peut être utilisé pour faire ce que vous voulez
une autre façon est d'utiliser une nouvelle colonne de formule et dans l'éditeur de formule, vous pouvez utiliser l'instruction conditionnelle if et vérifier l'absence de ness et définir la valeur sur na
alors vous pouvez utiliser ctrl+f pour rechercher et remplacer.
Il existe de nombreuses options parmi lesquelles vous pouvez choisir. J'aime beaucoup le recodage. Dans les scripts, j'utiliserais probablement un autre moyen : enregistrez la colonne dans une matrice ou une liste car vous souhaitez utiliser des valeurs non numériques "na" qui modifieront les valeurs en caractères, modifier les valeurs manquantes en na, puis réécrire les valeurs dans le valeurs de colonne. J'espère qu'une de ces idées vous aidera davantage
Re : Remplir les cellules manquantesJ'ai un tableau de données avec 2 colonnes. Vous devez vérifier si la valeur est vide pour def, jkl, mno et stu et remplir "NA" pour ces entrées.
Toute aide est appréciée.
| Paramètre | Évaluer |
| abc | 5 |
| définitivement | |
| ghi | 22 |
| jkl | |
| mno | |
| pqr | 3 |
| stu | |
| vwx | 73 |
| yz | 99 |
Re : Remplir les cellules manquantesUne autre mise à jour :
Au lieu d'utiliser ce script, jetez un œil à cette collection d'outils : https://community.jmp.com/t5/JMP-Add-Ins/Data-Table-Tools-Add-in/ta-p/28582
Ce complément a une meilleure version du script ci-dessus et bien plus encore.
Acclamations,
Byron
Re : Remplir les cellules manquantesUn problème similaire, mais un peu différent est le cas où vous voulez un certain nombre de cellules avant de l'entrée réelle doit avoir la même valeur. Là, vous devez faire des ajustements pour ne pas écraser les 4 cellules précédentes, par exemple, au cas où il y aurait une entrée non manquante. Attachez un script et une capture d'écran de la table de données avant et après l'exécution du script. Dans ce script, je n'ai couvert que le cas numérique.
Names Default To Here( 1 );
// Get Current Data Table
dt = Current Data Table();
// Get Column Names from selection box (where you want to fill)
dtcollist = dt << get column names;
dlg = Dialog(
"Select Column",
vlist( selection = List Box( dtcollist ), button( "OK" ) )
);
Remove From( dlg, 2 );
Eval List( dlg );
// Get matrix of values in selected columns
dtMat = (dt << Get All Columns As Matrix);
// For loop to loop through all selected columns
For( i = 1, i <= N Items( selection ), i++,
// get i-th selected column
colNum = Contains( dtColList, Name Expr( selection[i] ) );
// get values as matrix
vMat = dtMat[0, colNum];
// get rows where matrix is non-empty
mis = Loc( vMat );
// If there is non-missing value loop through previous rows
If( N Row( mis ),
// Get i-th Column name
col = Column( selection[i] );
/*
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
*/
// Loop to fill previous 4 rows from the row with the k-th non-missing value
For( k = 1, k <= N Rows(mis), k++,
For( j = If(mis[k]-4 < 1, 1,mis[k]-4), j < mis[k], j++,
If(Is Missing(col[j]), col[j] = col[mis[k]],col[j])
);
);
);
);
Data Table before and after applying the scriptTable de données avant et après l'application du script
Re : Remplir les cellules manquantesJe mets à jour ce complément avec ce script. Merci à Brady Brady pour quelques ajustements qui rendent cela plus rapide sur de très grandes tables. Sur une table de lignes de 5 MM avec quelque chose à remplir toutes les 10 000 lignes, cela prend 10 à 15 secondes.
Names Default To Here( 1 );
dt = Current Data Table();
dtcollist = dt << get column names;
dlg = Dialog( "Select Column", vlist( selection = List Box( dtcollist ), button( "OK" ) ) );
Remove From( dlg, 2 );
Eval List( dlg );
dtMat = (dt << Get All Columns As Matrix);
For( i = 1, i <= N Items( selection ), i++,
colNum = Contains( dtColList, Name Expr( selection[i] ) );
vMat = dtMat[0, colNum];
mis = Loc( Is Missing( vMat ) );
If( N Row( mis ),
col = column(selection[i]);
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
For( j = if(mis[1]==1, 2, 1), j <= N Row( mis ), j++,
col[mis[j]] = col[mis[j] - 1]
);
);
);
Re : Remplir les cellules manquantesFaire du script un complément ou le mettre dans une option de menu est ma béquille pour oublier les formules pour y arriver,
Ceci est une autre formule facile à faire.
:Complete est la nouvelle colonne où vit la formule.
:Missing est la colonne source avec des lignes manquantes.
//Lignes avec caractère
Si( :Manquant == "",
:Complète[Ligne() - 1, Vide()],
:Disparu)
//Lignes avec des nombres
Si( Manquant( :Manquant ) == 1,
:Complet [Ligne() - 1, Vide()],
:Disparu)
Re : Remplir les cellules manquantesJe me demande si on pourrait faire cela sans Expressions. Pour une seule colonne "MyCol1", vous pouvez faire qch. comme ça:
Pour chaque ligne ( Si ( Est manquant ( MonCol1 ) , : MonCol1 = Décalage ( MonCol1 , 1 ) ) ) ;
L'utilisation d'une approche automatisée pour sélectionner les colonnes comme vous le faites combinée avec cela devrait pouvoir le faire.