Bienvenidos al sitio

El espacio está destinado a aquellos que están interesados en la metodología de la investigación social y sus aplicaciones, especialmente profesionales, estudiantes e instituciones que requieren apoyo en estas áreas. También pretende enriquecer la comunicación con alumnos, tesistas y colegas. Sean bienvenidos a establecer contacto conmigo para hacer críticas, sugerencias y compartir ideas o pensamientos.

Pablo Cáceres Serrano

Construyendo nuevos objetos en R: cbind o objeto[condición]

La verdad es una nota ñoña sólo para mi, aunque apelo a cualquiera que sepa algo de esto a que comente el tema en particular.

En el entorno de programa R  (www.r-project.org), cuando se desea crear un nuevo objeto con base en un data.frame, por ejemplo, para dejar sólo columnas de variables cuantitativas, puedo usar dos procedimientos: cbind (ligar columnas) o bien segregar las columnas a través de la selección de un rango de columnas. En código, esto sería:

Supongan que tengo un data.frame con la siguiente estructura:

id sexo var1 var2 var3
1 masculino 3 5 7
2 masculino 4 4 6
3 masculino 3 5 7
4 masculino 6 5 7
5 masculino 5 6 7
6 femenino 4 5 6
7 femenino 3 4 7
8 femenino 3 3 8
9 femenino 2 4 7
10 femenino 6 5 6

La intención es quedarse sólo con las variables cuantitativas, las tres últimas. Procedemos del siguiente modo:

nuevo.objeto <- cbind(var1, var2, var3)

Luego, nuestro objeto se verá así:

var1 var2 var3
3 5 7
4 4 6
3 5 7
6 5 7
5 6 7
4 5 6
3 4 7
3 3 8
2 4 7
6 5 6

El problema es que si son 100 variables, escribirlas todas resulta aburrido y una pérdida de tiempo. Otra forma de hacerlo es:

nuevo.objeto <- data.frame[,c(3:5)] # donde "data.frame" corresponde al objeto tabla inicial
                                    # y la instrucción c(3:5) le dice al programa quedarse con las
                                    # 3 últimas variables.

El problema es que el resultado obtenido es:

row.names var1 var2 var3
1 3 5 7
2 4 4 6
3 3 5 7
4 6 5 7
5 5 6 7
6 4 5 6
7 3 4 7
8 3 3 8
9 2 4 7
10 6 5 6

Como se observa, aparece una nueva columna, que “etiqueta” las filas. Esto no implica ningún problema si la base está inalterada, pero si luego extraemos casos, la lista no se actualiza y me muestra el orden de acuerdo a esta nueva columna. Por ejemplo, si borro el caso 9, la lista no se renumera y me seguirá mostrando el caso que estaba en la posición 10 (y ahora está en la posición 9) como un “10”, es decir, no podré saber con cuántos casos cuento realmente.

El mayor y más concreto problema que he enfrentado es la eliminación de datos atípicos, si me guío por un base con la adición de row.names, estoy borrando casos de modo erróneo, porque en los procedimientos de detección de atípicos me muestra el caso “etiquetado” y no en su posición real. Si elimino casos lo voy a estar haciendo por su posición real, pero el programa me mostrará datos con su etiqueta antigua y no por la posición que ocupan actualmente.

¿Sugerencias?

1 comment to Construyendo nuevos objetos en R: cbind o objeto[condición]

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>