Compila le celle mancanti<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Le tabelle dei report spesso finiscono per avere colonne incomplete in cui le etichette devono essere copiate nelle celle sequenziali sottostanti fino all'etichetta successiva in cui il processo viene ripetuto ancora e ancora. L'importazione guidata di Excel ha un'opzione per gestire gli intervalli di celle mancanti che vengono unite. Questo script può essere utilizzato dopo l'importazione dei dati e non richiede l'unione degli intervalli delle celle mancanti.
Uso questo script, o versioni di esso, da così tanto tempo che non sono sicuro da dove provengano le sue ossa.
Ri: Compilare le celle mancanti@bayesfactor ha scritto:
Devo dire che queste sono alcune soluzioni orribilmente contorte per quello che dovrebbe essere un 1-liner:
Sono d'accordo che c'è solo una riga di codice che l'utente deve scrivere nel link che hai fornito, tuttavia la funzione sottostante non è un oneliner. Questo è vero per la maggior parte delle funzioni facili da usare in quasi tutti i linguaggi di programmazione, se è R, Python, MATLAB, anche in C/C++, ....
Nel componente aggiuntivo degli strumenti della tabella dati (come @Byron_JMP menzionato) troverai una funzionalità Span celle vuote, dove @brady_brady ha creato una tale funzione che potresti usare per fare quello che vuoi con un comando. Sebbene lo strumento inserisca la selezione della tabella, delle colonne e tutte le impostazioni in un'interfaccia. Quindi, se desideri farlo in modo diverso, dovresti modificare il codice sorgente della funzione in modo che prenda le colonne selezionate e accetti un input separato che specifichi il modo in cui si estendono le celle.
Nel caso in cui si desideri avere una funzione JSL per fare ciò per poterla incorporare in altri script, sarebbe una buona idea mettere questa richiesta sia a support@jmp.com e il Lista dei desideri JMP.
L'altro modo è basarsi sulla funzione con script di Brady e modificare la routine da utilizzare come funzione JSL in uno script JSL.
Ri: Compilare le celle mancantiottieni questo componente aggiuntivo (gratuito)
Componente aggiuntivo Strumenti tabella dati

quasi sicuro che lo strumento span celle vuote farà quello che stai cercando.
Ri: Compilare le celle mancantiHo un caso in cui voglio riempire i valori da più colonne avanti e indietro all'interno di blocchi della tabella in base a una colonna dell'etichetta. Dopo tutta questa discussione, non credo che ci sia un modo elegante per farlo - per favore correggi se sbaglio.
Devo dire che queste sono alcune soluzioni orribilmente contorte per quello che dovrebbe essere un 1-liner:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.fillna.html
Ri: Compilare le celle mancantiCIAO,
Poiché potrebbe esserci una versione più elegante, queste due opzioni dovrebbero funzionare.
In allegato c'è una tabella di dati che include uno script tavble che fa quello che vuoi (penso). Inoltre c'è una colonna con una formula che utilizza l'istruzione Match che fa lo stesso. Lo script che ho usato è
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";
);
Migliore,
Martino
Ri: Compilare le celle mancantiAncora bloccato a questo punto non sapendo come procedere oltre.
Tutti gli input apprezzati!
Grazie
Ri: Compilare le celle mancantiGrazie per la risposta!
Sto cercando di scrivere uno script per questo. Il problema qui è che potrei avere molte più colonne vuote. Ma devo solo controllare i valori per queste 4 colonne e compilare con "NA".
Grazie
Ri: Compilare le celle mancantiVuoi uno script per farlo? Interattivo è possibile utilizzare la ricodifica e salvare una colonna formula, questo script formula può essere utilizzato per fare ciò che si desidera
un altro modo è usare una nuova colonna formula e nell'editor di formule puoi usare l'istruzione if condizionale e verificare la mancanza di ness e impostare il valore su na
quindi potresti usare ctrl + f per cercare e sostituire.
Sonci sono molte opzioni tra cui puoi scegliere. Mi piace molto la ricodifica. Nello scripting probabilmente userei un altro modo: salva la colonna in una matrice o in una lista perché vuoi usare valori non numerici "na" che cambieranno i valori in caratteri, cambieranno i valori mancanti in na e poi scriveranno indietro i valori al valori di colonna. Spero che una di queste idee ti aiuti ulteriormente
Ri: Compilare le celle mancantiHo una tabella di dati con 2 colonne. È necessario verificare se Value è vuoto per def, jkl, mno e stu e compilare "NA" per queste voci.
Qualsiasi aiuto è apprezzato.
| Parametro | Valore |
| abc | 5 |
| def | |
| ghi | 22 |
| jkl | |
| mno | |
| pqr | 3 |
| stu | |
| vx | 73 |
| yz | 99 |
Ri: Compilare le celle mancantiUn altro aggiornamento:
Invece di utilizzare questo script, dai un'occhiata a questa raccolta di strumenti: https://community.jmp.com/t5/JMP-Add-Ins/Data-Table-Tools-Add-in/ta-p/28582
Questo componente aggiuntivo ha una versione migliore dello script sopra e molto altro ancora.
Saluti,
Byron
Ri: Compilare le celle mancantiUn problema simile, ma leggermente diverso, è il caso in cui desideri un certo numero di celle Prima la voce effettiva per avere lo stesso valore. Lì è necessario apportare modifiche per non sovrascrivere le celle precedenti, ad esempio 4 nel caso in cui vi sia una voce non mancante. In allegato uno script e uno screenshot del datatable prima e dopo l'esecuzione dello script. In questo script ho coperto solo il caso numerico.
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 scriptData Table before and after applying the scriptTabella dati prima e dopo l'applicazione dello script
Ri: Compilare le celle mancantiSto aggiornando questo componente aggiuntivo con questo script. Grazie a Brady Brady per alcune modifiche che lo rendono più veloce su tavoli davvero grandi. Su una tabella di righe da 5 mm con qualcosa da riempire ogni 10.000 righe, ci vogliono 10-15 secondi.
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]
);
);
);
Ri: Compilare le celle mancantiTrasformare lo script in un componente aggiuntivo o inserirlo in un'opzione di menu è la mia stampella per dimenticare le formule per realizzarlo,
Questa è un'altra formula facile per farlo.
:Complete è la nuova colonna in cui vive la formula.
:Missing è la colonna di origine con le righe mancanti.
// Righe con carattere
If( :Missing == "",
:Completa[Riga() - 1, Vuoto()],
:Mancante)
//Righe con numeri
If( Manca( :Missing ) == 1,
:Complete [Riga() - 1, Vuoto()],
:Mancante)
Ri: Compilare le celle mancantiMi chiedo se si possa fare questo senza Expressions. Per una singola colonna "MyCol1" potresti fare sth. come questo:
Per ogni riga ( Se ( Manca ( MyCol1 ) , : MyCol1 = Ritardo ( MyCol1 , 1 ) ) ) ;
L'utilizzo di un approccio automatizzato per selezionare le colonne come fai tu combinato con questo dovrebbe essere in grado di fare.