Actualizar las columnas dt en base a la lista nombrada.
Digamos que tengo el siguiente datatable ‘my_dt’:
neutrones | espectro | geografía |
---|---|---|
2.30 | -1.2 | KIEL |
2.54 | -1.6 | KIEL |
2.56 | -0.9 | JUNG |
2.31 | -0.3 | ANT |
También tengo la siguiente lista nombrada ‘my_list’:
> my_list
$partículas
[1] "neutrones"
$estación
[1] NA
$energía
[1] "espectro"
$área
[1] "geografía"
$gamma
[1] NA
Los valores de esta lista corresponden a los nombres de las columnas de mi conjunto de datos (si existen, si no existen – NA).
Con base en mi conjunto de datos y esta lista, necesito verificar qué columnas existen en ‘my_dt’ y renombrarlas (basado en los nombres de ‘my_list’), y para los valores NA, necesito crear columnas llenas de NA.
Por lo tanto, quiero obtener el siguiente conjunto de datos ‘final_dt’:
partículas | estación | energía | área | gamma |
---|---|---|---|---|
2.30 | NA | -1.2 | KIEL | NA |
2.54 | NA | -1.6 | KIEL | NA |
2.56 | NA | -0.9 | JUNG | NA |
2.31 | NA | -0.3 | ANT | NA |
Intenté implementar esto usando las funciones de la familia ‘apply’, pero por el momento no puedo obtener exactamente lo que quiero.
Por lo tanto, estaría agradecido/a por cualquier ayuda.
davy.ai
Para lograr el resultado deseado, podemos utilizar una combinación de las funciones
setnames
,setcolorder
yset
del paquetedata.table
. Aquí está el código:Esto debería darte la salida deseada:
El código primero obtiene los nombres de las columnas existentes en
my_dt
que también están enmy_list
. Luego, renombra estas columnas utilizando la funciónsetnames
. A continuación, para todas las columnas enmy_list
que no están enmy_dt
, crea nuevas columnas llenas deNA
utilizando un buclefor
y la funciónset
. Por último, establece el orden de las columnas para que coincida con el orden enmy_list
utilizandosetcolorder
.