Hai bisogno di suggerimenti sul modo migliore per aggiungere una colonna di tabella per un ID che faccia questo ....<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Fondamentalmente ho questa tabella originale:
| Colonna A | Colonna B | Colonna A | Colonna B |
| un | e | io | m |
| B | f | j | n |
| c | g | K | o |
| d | h | l | p |
Ora quello che voglio fare è creare un'altra tabella con un "nuovo ID di colonna" che assomigli a questo
| Nuovo ID colonna | Colonna A | Colonna B | Colonna A | Colonna B |
| 1 | un | e | io | m |
| 1 | B | f | j | n |
| 1 | c | g | K | o |
| 1 | d | h | l | p |
| 2 | un | e | io | m |
| 2 | B | f | j | n |
| 2 | c | g | K | o |
| 2 | d | h | l | p |
| 3 | un | e | io | m |
| 3 | B | f | j | n |
| 3 | c | g | K | o |
| 3 | d | h | l | p |
| X | un | e | io | m |
| X | B | f | j | n |
| X | c | g | K | o |
| X | d | h | l | p |
Quello che ho in mente ora è clonare la tabella originale creando un sottoinsieme. E su questo sottogruppo aggiungo il "nuovo ID colonna" con un certo valore (lo stesso per tutte le righe). Ripeto lo stesso processo creando il maggior numero di sottoinsiemi necessari (con ogni sottoinsieme viene aggiunto un "nuovo ID colonna"). Dopo aver finito, posso semplicemente concatenare tutti i sottoinsiemi in una tabella.
Voglio sapere se hai idee migliori che puoi condividere.
Ri: Hai bisogno di suggerimenti sul modo migliore per aggiungere una colonna di tabella per un ID che fa questo ....@Ian e @ms grazie per i tuoi buoni suggerimenti. Sul mio script attuale sto incorporando questo suggerimento da @Ian (con un mix di @ms).
Ri: Hai bisogno di suggerimenti sul modo migliore per aggiungere una colonna di tabella per un ID che fa questo ....Come spesso accade, la brevità è una virtù!
Mi è piaciuto così tanto Marcus, ne ho ricavato una funzione da riutilizzare in seguito:
NamesDefaultToHere ( 1 ) ;
// Dati di esempio
dt1 = nuovatabella ( "Dati sorgente" ,
newColumn ( "UN" , Numerico , Continuo , Formula ( CasualeNormale ())) ,
newColumn ( "B" , Numerico , Continuo , Formula ( RandomInteger ( 1 , 10 ))) ,
AddRows ( 6 ) ;
) ;
// Clona tabella 'dt' 'n' volte. . .
cloneTable =
Funzione ({ dt , n } , { Locale predefinito } ,
tavoli = Ripetere ({ dt } , n - 1 ) ;
new_dt = dt << concatenare ( tavoli ) ;
new_dt << imposta nome (( dt << getName ) || " clonato " || carbonizzare ( n ) || "tempi" ) ;
IDCol = new_dt << newColumn ( "ID" , Numerico , Nominale , Formula ( Soffitto ( Riga () / nRow ( dt )))) ;
IDCol << deleteFormula ;
new_dt << moveSelectedColumns ({ IDCol } , "ToFirst" )
) ;
dt2 = cloneTable ( dt1 , 20 ) ;
Ri: Hai bisogno di suggerimenti sul modo migliore per aggiungere una colonna di tabella per un ID che fa questo ....Non è necessario creare sottoinsiemi per concatenare più copie. Puoi semplicemente aggiungere la tabella originale più volte nella finestra di dialogo concatena. Se il nuovo ID è un contatore, è possibile utilizzare una formula di colonna per generare l'ID.
Un esempio jsl:
// Stack dt n times
dt = Tabella dei dati corrente () ;
n = 10 ;
tavoli = Ripetere ({ dt } , n - 1 ) ;
new_dt = dt << concatenare ( tavoli ) ;
new_dt << Nuova colonna ( "ID nuova colonna" , Numerico , Formula ( Soffitto ( Riga () / 4 ))) ;
Ri: Hai bisogno di suggerimenti sul modo migliore per aggiungere una colonna di tabella per un ID che fa questo ....Si prega di trovare un'alternativa, ma non sono sicuro che si possa dire che è "migliore":
NamesDefaultToHere ( 1 ) ;
// Esempio (numerico!) Dati
dt1 = nuovatabella ( "Dati sorgente" ,
newColumn ( "UN" , Numerico , Continuo , Formula ( CasualeNormale ())) ,
newColumn ( "B" , Numerico , Continuo , Formula ( RandomInteger ( 1 , 10 ))) ,
AddRows ( 6 ) ;
) ;
// Clona i dati in dt1 'n1' volte
n1 = 2 ;
n2 = nRow ( dt1 ) ;
fonte = dt1 << getAllColumnsAsMatrix ;
destinazione = [] ;
per ( io = 1 , io <= 2 , io ++, destinazione = VConcat ( destinazione , fonte )) ;
// Crea una colonna ID come un vettore
id = Ordine crescente ( Ripetere (( 1 :: n1 ) `, n2 )) ;
// Assembla il tavolo finale
Cols = Inserire ( dt1 << getColumnNames ( Stringa ) , "ID" , 1 ) ;
dt2 = astable ( id || destinazione , << ColumnNames ( Cols )) ;
dt2 << imposta nome (( dt1 << getName ) || " clonato " || carbonizzare ( n1 ) || "tempi" ) ;
Se i dati non sono tutti numerici, "Ottieni tutte le colonne come matrice" funziona ancora, ma hai il lavoro aggiuntivo di capire come rimappare i valori in Carattere quando assembla il dt2.