recuento.fnc
Copia, Pega y Adapta
datos= recuento.fnc(datos, variables=1:5, criterio= c(0,1) )
datos= recuento.fnc(datos, variables=1:5, criterio='Favorable')
datos= recuento.fnc(datos, variables=1:5, criterio=5:7, new.var='nivel')
OBJETIVO
Crea una nueva variable que resulta de la frecuencia absoluta del cumplimiento de un determinado valor o valores definidos por el usuario en p variables.
recuento.fnc
Partiremos de una base de datos simulada en la que recrearemos las respuestas de 50 sujetos en 5 variables con cinco alternativas. Deseamos generar una nueva variable que resulte del recuento de la presencia de los valores 0 y 1 para cada sujeto.
Generamos los datos artificiales mediante esta línea. Cópiala, pégala y ejecútala en tu script para generar una muestra aleatoria (tus datos pueden ser diferentes) de dichos datos.
datos=data.frame(abs(round(mvrnorm(100,rep(1,5),Sigma=diag(1,5)),0)))
head(datos)
X1 X2 X3 X4 X5
1 1 0 2 1 2
2 0 0 3 1 0
3 1 0 0 0 1
4 1 1 1 1 2
5 2 1 0 3 1
6 0 1 2 0 0
datos= recuento.fnc(datos, variables=1:5, criterio= c(0,1),
new.var='recuento')
O de forma similar dado que la base de datos esta compuesta exclusivamente por las variables sobre las que de desea realizar el recuento. Si no incluyes el argumento variables se utilizarán todas las existentes y si omites el argumento new.var, se creará por defecto una nueva variable de nombre recuento.
datos= recuento.fnc(datos, criterio=c(0,1))
#------------------------------------------------------------------
# Recuento de variables
#------------------------------------------------------------------
*** Se ha creado con exito la variable de recuento: recuento
head(datos)
X1 X2 X3 X4 X5 recuento
1 1 0 2 1 2 3
2 0 0 3 1 0 4
3 1 0 0 0 1 5
4 1 1 1 1 2 4
5 2 1 0 3 1 3
6 0 1 2 0 0 4
Probaremos seguidamente un recuento mas complejo y lo haremos a partir de la base de datos OBrienKaiser. Recuerda que disponemos de 15 medidas repetidas desde las columnas 3 a la 17. En esta ocasión deseamos obtener para cada sujeto un recuento de la frecuencia de ocurrencia de valores menores o iguales a 2 en las 15 variables. Modificando adecuadamente la función anterior obtendríamos de forma satisfactoria lo que deseamos.
OKaiser=recuento.fnc(OBrienKaiser, variables=3:17,
criterio= c(0,1,2))
Imaginemos ahora que en realidad dichas variables poseen muchos mas valores y que deseamos un límite que resulta imposible de definir mediante el criterio anterior (el argumento criterio debería entonces incluir un gran número de valores o un condicional no permitido como <= 100, etc). La solución pasa por discretizar previamente dichas variables definiendo un vector de cortes y etiquetas para posteriormente solicitar el recuento sobre las nuevas variables generadas. Veamos el procedimiento:
1.-Definiremos en primer lugar el vector de cortes que deseamos para los datos y sus etiquetas correspondientes.
datos=OBrienKaiser
cortes=c(0,2,5,16); etiquetas=c(1,2,3)
Tenemos 4 valores en el vector de cortes y 3 etiquetas. Así todo valor entre 0 y 2 tendrá en la nueva variable discretizada el valor 1. Todo valor superior a 2 y hasta 5 el nuevo valor 2 y cualquier valor mayor que 5 y menor o igual a 16 un 3. Observa, como siempre el vector de etiquetas ha de tener un valor menos que su correspondiente vector de cortes.
2.- Crearemos seguidamente un bucle for que nos permitirá recodificar las 15 variables de forma automática. Observa el argumento variable que tiene como valor i. Es decir i se irá modificando desde su valor de inicio 3 hasta el último de 17. Y por tanto se va discretizando de forma automática una a una hasta completar el bucle.
for(i in 3:17)
datos=discretiza.variable.fnc(datos, variable=i,
cortes=cortes, etiquetas=etiquetas)
3.- Con nombres.var(datos) podemos acceder al nombre, columna y tipo de las variables de las nuevas variables generadas en la data.frame.
nombres.var(datos)
nombre numero tipo
1 treatment 1 factor
2 gender 2 factor
3 pre.1 3 numeric
4 pre.2 4 numeric
5 pre.3 5 numeric
6 pre.4 6 numeric
7 pre.5 7 numeric
8 post.1 8 numeric
9 post.2 9 numeric
10 post.3 10 numeric
11 post.4 11 numeric
12 post.5 12 numeric
13 fup.1 13 numeric
14 fup.2 14 numeric
15 fup.3 15 numeric
16 fup.4 16 numeric
17 fup.5 17 numeric
18 pre.1.r 18 numeric
19 pre.2.r 19 numeric
20 pre.3.r 20 numeric
21 pre.4.r 21 numeric
22 pre.5.r 22 numeric
23 post.1.r 23 numeric
24 post.2.r 24 numeric
25 post.3.r 25 numeric
26 post.4.r 26 numeric
27 post.5.r 27 numeric
28 fup.1.r 28 numeric
29 fup.2.r 29 numeric
30 fup.3.r 30 numeric
31 fup.4.r 31 numeric
32 fup.5.r 32 numeric
3.- Podemos ver las nuevas variables generadas (.r sufijo que se añade por defecto cuando se discretiza una variable) que ocupan las columnas 18 a la 32. Estamos preparados ya para solicitar el recuento de nuestras nuevas variables utilizando el argumento criterio=1 en la llamada a la función, dado que en la nueva variable serán 1 todos los registros que en la original tengan un valor entre 0 y 2.
datos= recuento.fnc(datos, variables=18:32, criterio=1)
#------------------------------------------------------------------
# Recuento de variables
#------------------------------------------------------------------
*** Se ha creado con exito la variable de recuento: recuento
head(datos[,18:33])
pre.1.r pre.2.r pre.3.r pre.4.r pre.5.r post.1.r post.2.r post.3.r post.4.r
1 1 1 1 1 1 2 1 1 1
2 2 2 1 2 2 1 1 1 1
3 2 3 1 3 3 2 2 2 1
4 2 2 2 2 2 1 1 1 1
5 2 2 2 2 2 3 3 2 2
6 3 3 2 3 3 3 3 2 2
post.5.r fup.1.r fup.2.r fup.3.r fup.4.r fup.5.r recuento
1 1 1 1 1 1 2 13
2 2 2 1 3 1 1 8
3 2 3 2 3 2 3 2
4 2 2 1 2 1 2 6
5 2 2 1 3 1 2 2
6 3 3 2 3 2 3 0
RECUENTO DE VARIABLES CUALITATIVAS
En ocasiones deseamos realizar un recuento de la frecuencia absoluta de un determinado valor cualitativo en p variables. Utilizaremos como ejemplo una discretización percentílica de cuatro cuartiles de las 15 variables de la misma base de datos OBrienKaiser. Deseamos conocer el recuento del cuartil primero y segundo (Q1 y Q2) para las 15 variables en todos los sujetos. Para ello realizaremos los siguientes pasos:
1.- Discretizaremos de forma automática con un bucle for las 15 variables descritas en 4 cuartiles (Q1 a Q4).
datos=OBrienKaiser
for(i in 3:17)
datos=discretiza.variable.fnc(datos, variable=i, ntiles=4)
head(datos[,-c(1:3)]) # Pedimos que no nos muestre las 3 primeras columnas
pre.2 pre.3 pre.4 pre.5 post.1 post.2 post.3 post.4 post.5 fup.1 fup.2 fup.3
1 2 4 2 1 3 2 5 3 2 2 3 2
2 4 5 3 4 2 2 3 5 3 4 5 6
3 6 5 7 7 4 5 7 5 4 7 6 9
4 4 7 5 4 2 2 3 5 3 4 4 5
5 4 6 4 3 6 7 8 6 3 4 3 6
6 8 7 9 9 9 9 10 8 9 9 10 11
fup.4 fup.5 pre.1.r pre.2.r pre.3.r pre.4.r pre.5.r post.1.r post.2.r
1 4 4 Q1 Q1 Q1 Q1 Q1 Q1 Q1
2 4 1 Q2 Q2 Q2 Q1 Q2 Q1 Q1
3 7 6 Q3 Q4 Q2 Q4 Q4 Q2 Q2
4 3 4 Q3 Q2 Q4 Q3 Q2 Q1 Q1
5 4 3 Q2 Q2 Q3 Q2 Q1 Q3 Q3
6 9 6 Q4 Q4 Q4 Q4 Q4 Q4 Q4
post.3.r post.4.r post.5.r fup.1.r fup.2.r fup.3.r fup.4.r fup.5.r
1 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1
2 Q1 Q1 Q1 Q1 Q2 Q1 Q1 Q1
3 Q2 Q1 Q2 Q3 Q2 Q3 Q3 Q2
4 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1
5 Q3 Q2 Q1 Q1 Q1 Q1 Q1 Q1
6 Q4 Q3 Q4 Q4 Q4 Q4 Q4 Q2
2.- Realizamos el recuento de los valores Q1 y Q2. Observa que en el argumento variables incluímos ahora a las 15 nuevas variables (18 a la 32) que son una recodificación percentílica de las 15 originales cuantitativas.
datos=recuento.fnc(datos, variables=18:32, criterio=c('Q1','Q2'))
#------------------------------------------------------------------
# Recuento de variables
#------------------------------------------------------------------
*** Se ha creado con exito la variable de recuento: recuento
head(datos[,18:33])
pre.1.r pre.2.r pre.3.r pre.4.r pre.5.r post.1.r post.2.r post.3.r post.4.r
1 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1
2 Q2 Q2 Q2 Q1 Q2 Q1 Q1 Q1 Q1
3 Q3 Q4 Q2 Q4 Q4 Q2 Q2 Q2 Q1
4 Q3 Q2 Q4 Q3 Q2 Q1 Q1 Q1 Q1
5 Q2 Q2 Q3 Q2 Q1 Q3 Q3 Q3 Q2
6 Q4 Q4 Q4 Q4 Q4 Q4 Q4 Q4 Q3
post.5.r fup.1.r fup.2.r fup.3.r fup.4.r fup.5.r recuento
1 Q1 Q1 Q1 Q1 Q1 Q1 15
2 Q1 Q1 Q2 Q1 Q1 Q1 15
3 Q2 Q3 Q2 Q3 Q3 Q2 8
4 Q1 Q1 Q1 Q1 Q1 Q1 12
5 Q1 Q1 Q1 Q1 Q1 Q1 11
6 Q4 Q4 Q4 Q4 Q4 Q2 1