Recodificar

Copia, Pega y Adapta

datos$V8 = recode(datos$V8, " 'F'='M'; 'M'='H'; else=NA" )

datos$V6 = recode(datos$V6, " lo:10='bajo'; 11:hi='alto';

                    else= NA ")

datos$V5 = recode(datos$V5, " -999=NA ")

bfi= recode.multiple.fnc(bfi, variables=c(1,9,11,12,22,25), 

        valor.antiguo=1:6, valor.nuevo=6:1)

bfi= recode.multiple.fnc(bfi, variables=c(1,9,11,12,22,25), 

        valor.antiguo=1:6, valor.nuevo=6:1, resto.NA=T)

bfi= recode.multiple.fnc(bfi, variables=c(1,9,11,12,22,25), 

        valor.antiguo=1:6, valor.nuevo=6:1, nueva.variable=T)


OBJETIVO

Recodifica variables existentes en la misma variable u otra diferente, a partir de criterios especificados por el usuario.

1.- recode (una sola variable, diferentes valores)

Utilizaremos directamente la función recode de la librería car. Veamos el siguiente ejemplo:

OBrienKaiser$genero= recode(OBrienKaiser$gender,"

       'M'='hombre'; 'F'='mujer'; else=NA " )

Creamos la nueva variable genero en la base de datos  OBrienKaiser, a partir de la recodificación de la variable gender que tiene en origen 2 niveles (M y F). En la nueva variable M será hombre, F mujer y cualquier otro valor lo haremos caso perdido (NA).

Supongamos que disponemos de una variable llamada electrodo con 29 niveles (canales) en la base de datos de nombre erp y deseamos crear otra de nombre hemisferio con dos niveles: izquierdo y derecho. Una forma rápida y eficiente de realizar esta recodificación sería:

Creamos dos vectores (izquierdo y derecho) con los nombres de los electodos que queremos recodificar.

Mediante recode indicamos que los elementos del vector izquierdo y derecho tendrán la etiqueta 'izquierdo' y 'derecho' respectivamente en la nueva variable recodificada hemisferio.

Reglas de recode

2.- recode.multiple.fnc

RECODIFICIÓN MÚLTIPLE SOBRE LAS MISMAS VARIABLES

Recodificar p variables todas con los mismos valores de recodificación.  Por ejemplo en muchas ocasiones sobre todo con cuestionarios, es muy común la existencia de items que se han invertido para evitar la deseabilidad social del sujeto que responde. En estas circunstancias, lo normal es reinvertir los valores de la variable para que todos los items pertenecientes a una misma escala presenten el mismo "sentido". La forma mas rápida y eficiente de lograrlo es con la función creada a tal efecto recode.multiple.fnc (P.Prieto y Juan A. Hernández) que lleva a cabo precisamente esta labor.

Utilizaremos como ejemplo la base de datos bfi (2800 sujetos) de la librería psych perteneciente al cuestionario autoadministrado Synthetic Aperture Personality Assessment (SAPA)  con 25 items en 5 escalas: Conformidad, Autoconsciencia, Extraversión, Neuroticismo y Apertura.  En dichas escalas, los items 1,9,11,12,22 y 25 están invertidos. Veamos el procedimiento de reinvertirlos al mismo sentido que el resto de los items.

bfi= recode.multiple.fnc(bfi, variables=c(1,9,11,12,22,25), 

        valor.antiguo=1:6, valor.nuevo=6:1)

#------------------------------------------------------------------

#               RECODIFICACION MULTIPLE DE VARIABLES               

#------------------------------------------------------------------

*** Se han recodificado las siguientes variables:

[1] "A1" "C4" "E1" "E2" "O2" "O5"

*** desde los valores originales: 1 2 3 4 5 6

*** a los nuevos: 6 5 4 3 2 1

Observa que hemos incluido dos argumentos nuevos: valor.antiguo y valor.nuevo relativos a los valores originales y a los nuevos recodificados. 


RECODIFICIÓN MÚLTIPLE SOBRE VARIABLES DIFERENTES.

Si desear conservar las variables originales y por lo tanto recodificar en variable diferente debes incluir el argumento nueva.variable=T.

bfi= recode.multiple.fnc(bfi, variables=c(1,9,11,12,22,25), 

        valor.antiguo=1:6, valor.nuevo=6:1, nueva.variable=T)

#------------------------------------------------------------------

#               RECODIFICACION MULTIPLE DE VARIABLES               

#------------------------------------------------------------------

*** Se han recodificado las siguientes variables:

[1] "A1" "C4" "E1" "E2" "O2" "O5"

*** En estas nuevas variables:

[1] "A1.r" "C4.r" "E1.r" "E2.r" "O2.r" "O5.r"

*** desde los valores originales: 1 2 3 4 5 6

*** a los nuevos: 6 5 4 3 2 1

Si las nuevas variables a crear ya existiesen en la base de datos (por una recodificación anterior) la función te dará el siguiente mensaje de error, indicándote que debes o renombrar la o las variables de la base de datos o incluir el argumento sustituye=T para sustituir las antiguas variables por las nuevas.

#------------------------------------------------------------------

#               RECODIFICACION MULTIPLE DE VARIABLES               

#------------------------------------------------------------------

*** Error. Parece que esas variables han sido anteriormente recodificadas,

*** puesto que ya existen en la base de datos. Estas son esas variables:

[1] "A1.r" "C4.r" "E1.r" "E2.r" "O2.r" "O5.r"


*** Renómbralas si deseas conservarlas con cambia.nombre.var.fnc

*** o incluye el argumento sustituye=T en la llamada a la función.


bfi= recode.multiple.fnc(bfi, 

        variables=c(1,9,11,12,22,25), 

        valor.antiguo=1:6, valor.nuevo=6:1,

        nueva.variable=T, sustituye=T)

Si no incluyes todos los valores posibles de la variable en el argumento valor.antiguo, la variable seguirá conservando los valores o etiquetas no incluidos en dicho argumento. Si deseas que esos valores o etiquetas (si se trata de un factor) omitidos del argumento valores.antiguos pases a ser perdidos por el sistema, incluye el argumento resto.NA=T.

datos=recode.multiple.fnc(OBrienKaiser, variables=3:5, 

valor.antiguo=1:5, valor.nuevo=c(1,1,1,2,2))


#------------------------------------------------------------------

#               RECODIFICACION MULTIPLE DE VARIABLES              

#------------------------------------------------------------------

*** WARNING. No se han recodificado todos los valores de la variable.

*** Si lo que deseas es hacer NA a los valores no definidos en el vector

*** de valores.nuevos, incluye el argumento resto.NA=T


datos=recode.multiple.fnc(OBrienKaiser, variables=3:5, valor.antiguo=1:5,

    valor.nuevo=c(1,1,1,2,2), resto.NA=T)

En el primer caso las variables pre.1 hasta pre.3 una vez recodificadas tendrá valores no recogidos en el argumento valor.antiguo (6,7 y 8). En la segunda llamada a la función las variables recodificadas solo tendrán como valores posibles los definidos en el argumento valor.nuevo ya que se ha incluido el argumento resto.NA=T, indicando que todo valor no declarado en valor.antiguo deberá ser eliminado de la variable.