agregar filas basadas en los valores de una columna en la misma tabla de datosEstimados,
Tengo una tabla de datos que contiene columnas de identificación, datos de la última inspección y decisión de la última inspección. Quiero combinar la última columna de datos de inspección con la última decisión de inspección para tener una columna (apilada) para usar en el análisis de asociación. Por ejemplo, un grupo de mi estructura de datos se parece al siguiente:
ID Decisión de la última inspección Datos de la última inspección
101 DEFECTO EN LAS ESPECIFICACIONES DEL PRODUCTO
101 Desviaciones del CGMP
101 21 CFR 211.113
101 VAI LIQ_US
Me gustaría mover la Decisión de la última inspección, en este caso VAI, a la columna Datos de la última inspección y crear una nueva fila que tenga el mismo ID, en este caso 101. Por lo tanto necesito que mis datos apilados sean como:
ID Datos de la última inspección
101 DEFECTO EN LAS ESPECIFICACIONES DEL PRODUCTO
101 Desviaciones del CGMP
101 21 CFR 211.113
101 LIQ_US
101 VAI
Además, algunos de estos ID se repiten pero con valor diferente en uno o más de los Datos de la última inspección. Por ejemplo, Lab DEFECT puede ser otro problema para el mismo ID, por lo que creo otro grupo de filas cada vez que alguno de estos valores difiere del anterior.
ID Decisión de la última inspección Datos de la última inspección
101 DEFECTO de laboratorio
101 Desviaciones del CGMP
101 21 CFR 211.113
101 VAI LIQ_US
Muchas gracias por adelantado por su ayuda.
Mejor,
Qais
Re: agregar filas basadas en los valores de una columna en la misma tabla de datosNo estoy seguro de haber entendido bien, pero aquí tienes una alternativa. Si es lo que desea, también necesita ver qué tan bien escalará.
NamesDefaultToHere(1);
// Example table . . .
dt = New Table( "Inspection",
Add Rows( 10 ),
New Column( "ID",
Character,
"Nominal",
Set Values(
{"101", "101", "101", "101", "102", "102", "102", "101", "101", "101"}
)
),
New Column( "Last Inspection Decision",
Character,
"Nominal",
Set Values( {"", "", "", "VAI", "", "", "Code 1", "", "", "Code 2"} )
),
New Column( "Last Inspection Data",
Character,
"Nominal",
Set Values(
{"PRODUCT SPECIFICATIONS DEFECT", "CGMP Deviations", "21 CFR 211.113",
"LIQ_US", "PRODUCT SPECIFICATIONS DEFECT", "21 CFR 211.113", "LIQ_US",
"PRODUCT SPECIFICATIONS DEFECT", "CGMP Deviations", "21 CFR 211.113"}
)
)
);
// Copy the table
dt2 = Eval(dt << getScript);
dt2 << setName(dt << getName ||" Stacked");
// Get the values from the two columns of interest into lists
ids = Column(dt2, "ID") << getValues;
vals = Column(dt2, "Last Inspection Data") << getValues;
// Find out where we need to insert new values, get the required values, and insert them into the right positions
insertAfter = dt2 << getRowsWhere(!IsMissing(:Last Inspection Decision));
for(r=1, r<= NItems(insertAfter), r++,
InsertInto(ids, Column(dt2, "ID")[insertAfter[r]], insertAfter[r] + r);
InsertInto(vals, Column(dt2, "Last Inspection Decision")[insertAfter[r]], insertAfter[r] + r);
);
// Add rows to teh copy of the table, insert the column values, and delete the column we don't need
dt2 << addRows(NRows(insertAfter));
Column(dt2, "ID") << setValues(ids);
Column(dt2, "Last Inspection Data") << setValues(vals);
dt2 << deleteColumns(:Last Inspection Decision);
Re: agregar filas basadas en los valores de una columna en la misma tabla de datosHola,
No funciona porque tengo más de 100.000 filas. Intenté dividir mis datos en tres partes, cada una con casi 35.000 filas, pero no funciona. ¿Cualquier sugerencia?
Mejor,
Qais
Re: agregar filas basadas en los valores de una columna en la misma tabla de datosEsta no es la solución más sólida, pero pruébala:
dt = current data table ();
for each row( if(!is missing (:Last Inspection Decision),
dt << add rows(1, row()),
is missing (:Last Inspection Data), :Last Inspection Data[row()] = :Last Inspection Decision[row()-1])
);