Incorporación de nuevas variables

Puede ocurrir que en un momento determinado de nuestra investigación necesitemos añadir alguna variable a nuestros registros. Como hemos dicho antes, esto es más bien un problema de edición y, por lo general, resulta mejor idea resolverlo fuera de R e incorporar el nuevo conjunto de datos por los medios de importación que ya hemos estudiado anteriormente. Sin embargo, vamos a ver algunas maneras de resolver la cuestión dentro de R.
Si tenemos dos data.frames con uno o varios campos (utilizando la terminología de las bases de datos) en común, podemos utilizar la función merge() para incorporar campos (variables) de uno a otro. Como siempre que se desea enlazar dos tablas, debemos indicar sus nombres, y qué campos tienen en común.
Supongamos que tenemos dos data.frame como los siguientes
enfe
Nombre Enero Febrero
1 María 10 20
2 José 20 10
3 Sara 30 40
ma
Nombre Marzo
1 María 13
2 José 45
3 Sara 32
enfe almacena los puntos acumulados por tres alumnos/as en los meses de enero y febrero. ma almacena los que han almacenado, los mismos alumnos durante marzo. Para añadir los datos de marzo a los de enero y febrero deberíamos teclear
merge(enfe,ma,by.x="Nombre",by.y="Nombre")
el resultado sería
Nombre Enero Febrero Marzo
1 José 20 10 45
2 María 10 20 13
3 Sara 30 40 32

Como se ve, el resultado es el deseado. En este caso nos ha parecido conveniente crear un nuevo data.frame (mediante una asignación) con los datos de los tres meses. Si quisiéramos añadir la variable a un data.frame existente sin crear uno nuevo, lo único que deberíamos hacer es asignar el resultado de la función merge a dicho data.frame. En este caso,
enfe<- merge(enfe,ma,by.x="Nombre",by.y="Nombre")
añadiría los datos de marzo al data.frame enfe.
En muchas ocasiones, los data.frames a unir no tienen exactamente los mismos registros. En el caso anterior, por ejemplo, en el mes de marzo podría haberse incorporado algún alumno nuevo. Para que le resultado de la unión recoja todos los registros contenidos en uno y otro data.frame debemos modificar un poco la orden
merge(enfe,ma,by.x="Nombre",by.y="Nombre",all.x=T,all.y=T)
con esos all.x=T y all.y=T (la T hace referencia al inglés TRUE, VERDAD) le decimos que incorpore todos los casos (all) del data.frame x (el que ponemos en primer lugar), y también del data.frame y . Como es natural, en este caso se completarán con NA's los valores de las variables para los que no tengamos datos.
Hay que tener en cuenta que sin esos dos argumentos, sólo los casos comunes a ambos data.frame serían seleccionados.
Finalmente, si sólo quisiéramos considerar los casos incluidos en uno de los data.frame, deberíamos indicarlo en la orden. Por ejemplo,
merge(enfe,ma,by.x="Nombre",by.y="Nombre",all.y=T)
daría como resultado la unión considerando sólo los alumnos presentes en el mes de marzo, que es el data.frame y.

2007-02-12