Necesita sugerencias sobre la mejor manera de agregar una columna de tabla para una ID que haga esto ...<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Básicamente tengo esta mesa original:
| Columna A | Columna B | Columna A | Columna B |
| una | mi | yo | metro |
| segundo | F | j | norte |
| do | sol | k | o |
| re | h | l | pag |
Ahora, lo que quiero hacer es crear otra tabla con un "nuevo ID de columna" que tenga este aspecto
| Nueva ID de columna | Columna A | Columna B | Columna A | Columna B |
| 1 | una | mi | yo | metro |
| 1 | segundo | F | j | norte |
| 1 | do | sol | k | o |
| 1 | re | h | l | pag |
| 2 | una | mi | yo | metro |
| 2 | segundo | F | j | norte |
| 2 | do | sol | k | o |
| 2 | re | h | l | pag |
| 3 | una | mi | yo | metro |
| 3 | segundo | F | j | norte |
| 3 | do | sol | k | o |
| 3 | re | h | l | pag |
| X | una | mi | yo | metro |
| X | segundo | F | j | norte |
| X | do | sol | k | o |
| X | re | h | l | pag |
Lo que tengo en mente ahora es clonar la tabla original creando un subconjunto. Y en este subconjunto agrego el "nuevo ID de columna" con un cierto valor (el mismo para todas las filas). Repito el mismo proceso creando tantos subconjuntos como sea necesario (con cada subconjunto se agrega una "nueva ID de columna"). Una vez que haya terminado, puedo concatenar todos los subconjuntos en una tabla.
Quiero saber si tienes mejores ideas que puedas compartir.
Re: necesita sugerencia sobre la mejor manera de agregar una columna de tabla para una ID que haga esto ...@Ian y @ms gracias por tus buenas sugerencias. En mi guión actual estoy incorporando esta sugerencia de @Ian (con una mezcla de @ms).
Re: necesita sugerencia sobre la mejor manera de agregar una columna de tabla para una ID que haga esto ...Como suele ser el caso, la brevedad es una virtud.
Me gustó mucho el estilo de Marcus, hice una función para reutilizarlo más tarde:
NombresDefaultToHere ( 1 ) ;
// Data de muestra
dt1 = Tabla nueva ( "Datos fuente" ,
Nueva Columna ( "UNA" , Numérico , Continuo , Fórmula ( RandomNormal ())) ,
Nueva Columna ( "SEGUNDO" , Numérico , Continuo , Fórmula ( RandomInteger ( 1 , 10 ))) ,
AddRows ( 6 ) ;
) ;
// Clona la tabla 'dt' 'n' veces. . .
tabla de clonar =
Función ({ dt , norte } , { Predeterminado local } ,
mesas = Repetir ({ dt } , norte - 1 ) ;
new_dt = dt << concatenar ( mesas ) ;
new_dt << escoger un nombre (( dt << getName ) || clonado || Carbonizarse ( norte ) || "tiempos" ) ;
idCol = new_dt << nuevoColumna ( "CARNÉ DE IDENTIDAD" , Numérico , Nominal , Fórmula ( Techo ( Fila () / NRow ( dt )))) ;
idCol << deleteFormula ;
new_dt << moveSelectedColumns ({ idCol } , "Primero" )
) ;
dt2 = tabla de clonar ( dt1 , 20 ) ;
Re: necesita sugerencia sobre la mejor manera de agregar una columna de tabla para una ID que haga esto ...No es necesario realizar subconjuntos para concatenar varias copias. Solo puede agregar la tabla original varias veces en el diálogo de concatenar. Si la nueva ID es un contador, se puede utilizar una fórmula de columna para generar la ID.
Un ejemplo de jsl:
// Apilar dt n veces
dt = Tabla de datos actual () ;
norte = 10 ;
mesas = Repetir ({ dt } , norte - 1 ) ;
new_dt = dt << concatenar ( mesas ) ;
new_dt << Nueva Columna ( "Nueva ID de columna" , Numérico , Fórmula ( Techo ( Fila () / 4 ))) ;
Re: necesita sugerencia sobre la mejor manera de agregar una columna de tabla para una ID que haga esto ...Por favor, busque una alternativa, pero no estoy seguro de que se pueda decir que es 'mejor':
NombresDefaultToHere ( 1 ) ;
// Datos de muestra (¡numéricos!)
dt1 = Tabla nueva ( "Datos fuente" ,
Nueva Columna ( "UNA" , Numérico , Continuo , Fórmula ( RandomNormal ())) ,
Nueva Columna ( "SEGUNDO" , Numérico , Continuo , Fórmula ( RandomInteger ( 1 , 10 ))) ,
AddRows ( 6 ) ;
) ;
// Clona los datos en dt1 'n1' veces
n1 = 2 ;
n2 = NRow ( dt1 ) ;
fuente = dt1 << getAllColumnsAsMatrix ;
destino = [] ;
para ( yo = 1 , yo <= 2 , yo ++, destino = VConcat ( destino , fuente )) ;
// Hacer una columna de ID como un vector
carné de identidad = Orden ascendente ( Repetir (( 1 :: n1 ) ` n2 )) ;
// Montar la mesa final.
cols = Insertar ( dt1 << getColumnNames ( Cuerda ) , "CARNÉ DE IDENTIDAD" , 1 ) ;
dt2 = Asable ( carné de identidad || destino , << ColumnNames ( cols )) ;
dt2 << escoger un nombre (( dt1 << getName ) || clonado || Carbonizarse ( n1 ) || "tiempos" ) ;
Si los datos no son todos numéricos, 'Get All Columns As Matrix' aún funciona, pero tiene el trabajo adicional de averiguar cómo volver a asignar valores a Character cuando ensambla dt2.