Recodificar múltiples columnas con listaQuiero recodificar varias columnas usando una fórmula condicional revisando cada columna con una función Para cada uno. No puedo recodificar correctamente con el siguiente código:
<
//Crear lista de columnas a recodificar
ColNames = {dt:Nombre("columna 1"), dt:Nombre("columna 2"),
dt:Nombre("columna 3"), dt:Nombre("columna 4")};
Para cada uno({listitem}, ColNames, Recode(
elemento de lista,
{Lowercase( _rcNow ), If( Contiene( _rcNow, "demasiado"),
"1000",
_rcAhora
), Regex( _rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE )}
));
Mi corazonada es que el cuerpo de la cláusula For Each es incorrecto, que de alguna manera tengo que llamar las columnas más claramente.
La tabla de datos como "dt" se establece anteriormente en el código. Para que conste, no obtengo un error cuando uso el script, pero las columnas no se recodifican correctamente. Gracias.
secuencias de comandosRe: Recodificar múltiples columnas con listaTal vez solo necesite usar Recode Column en lugar de Recode y luego jugar un poco sobre cómo hacer referencia a las columnas.
Esto parece estar funcionando, al menos reemplaza demasiado con 1000 en la columna 1:
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(1),
New Column("col 1", Character, "Nominal", Set Values({"too much"})),
New Column("col 2", Character, "Nominal", Set Values({"a"})),
New Column("col 3", Character, "Nominal", Set Values({"c"})),
New Column("col 4", Character, "Nominal", Set Values({"d"}))
);
//Create list of columns to be recoded
ColNames = {"col 1"};
For Each({listitem}, ColNames,
dt << Recode Column(
//As Column(dt, listitem),
AsColumn(listitem),
{Lowercase(_rcNow), If(Contains(_rcNow, "too much"),
"1000",
_rcNow
), Regex(_rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE)},
Update Properties(1),
Target Column(Column(listitem))
)
);Re: Recodificar múltiples columnas con listaAdapté el código aquí para mis propósitos (varias columnas en la lista) pero aún no funciona:
ColNames = {dt:Name("col 1"), dt:Name("col 2"),
dt:Name("col 3"), dt:Name("col4")};
For Each({listitem}, ColNames,
dt<<RECODE column=""></RECODE>¿Estabas sugiriendo que fuera columna por columna para recodificar?
Re: Recodificar múltiples columnas con listaNo estoy seguro de qué formatos de columnas requiere Recode Columns. Puede ver que estamos usando diferentes sintaxis para ColNames (estoy usando una lista de nombres de columnas, y usted está usando la forma antigua de hacer referencia a las columnas (Nombre ("nombre de columna"), ha sido reemplazado por "nombre de columna" n) , también estamos usando diferentes columnas en la columna de destino.
Si ejecuta el ejemplo que di con esta tabla de datos:

termino con esto

Aquí hay un ejemplo actualizado con una nueva tabla y más columnas agregadas a la lista ColNames
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(3),
Compress File When Saved(1),
New Column("col 1", Character, "Nominal", Set Values({"1000", "too much", "too much"})),
New Column("col 2",
Character,
"Nominal",
Set Values({"too much", "", ""}),
Set Display Width(65)
),
New Column("col 3", Character, "Nominal", Set Values({"c", "", "too much"})),
New Column("col 4", Character, "Nominal", Set Values({"d", "", ""}))
);
wait(1);
//Create list of columns to be recoded
ColNames = {"col 1", "col 2", "col 3", "col 4"};
For Each({listitem}, ColNames,
dt << Recode Column(
//As Column(dt, listitem),
As Column(listitem),
{Lowercase(_rcNow), If(Contains(_rcNow, "too much"),
"1000",
_rcNow
), Regex(_rcNow, "\D*(\d+\.?\d*)\D*", "\1", GLOBALREPLACE)},
Update Properties(1),
Target Column(Column(listitem))
)
);
Re: Recodificar múltiples columnas con lista¡Gracias por tu ayuda! Jordan Hiller me ayudó a entender su respuesta original. No entiendo por qué usar la lista de columnas como cadenas funciona mientras que usar una lista de columnas reales no funciona, pero sigo su solución ahora de todos modos. Útil para ver cómo ahora también se llaman los nombres de las columnas. Buen recordatorio. Gracias de nuevo.