Acerca de… trabajar con dataframes en R

Hola.

Los dataframes son una forma muy útil de organizar los datos en R. Pero siempre me encuentro con dificultades para trabajar con ellos, sobretodo para hacer cosas triviales, por ejemplo ¿Como se crea o se borra una columna?

Usemos el dataframe dades del post anterior.

Para ver una columna de un dataframe basta con usar $, hay que poner

> nombredf$nombrecolumna
> dades$datos1

teniendo en cuenta esto podemos trabajar con estos datos como si fueran un vector…

> mean(dades$datos1)
[1] 51.877

…nos da lo mismo que nos daba el summary de otro post anterior.

Pero ¿Y si ahora queremos añadir otra columna al dataframe?

Primero tenemos que asegurarnos de que la longitud del dataframe sea la misma que la de la nueva columna.

> length(dades$datos1)
[1] 40

le pido la longitud sólo de una de las columnas, por que al ser un dataframe todas tienen que medir lo mismo.

Creamos la una nueva columna de 40 elementos

> nueva.col<-c(seq(1:40))

y la pegamos al dataframe

> dades$factor3<-nueva.col

si es un factor se lo decimos

> dades$factor3<-as.factor(dades$factor3)

y ya está

> summary(dades)
factor1   factor2  datos1           datos2          datos3          factor3
a:20      1:10     Min.   : 0.32    Min.   : 12.17  Min.   : 1.00   1: 1
b:20      2:10     1st Qu.:25.35    1st Qu.:263.51  1st Qu.:10.75   2: 1
          3:10     Median :54.05    Median :476.13  Median :30.00   3: 1
          4:10     Mean   :51.88    Mean   :501.87  Mean   :30.00   4: 1
                   3rd Qu.:76.39    3rd Qu.:725.57  3rd Qu.:49.25   5: 1
                   Max.   :99.96    Max.   :996.24  Max.   :59.00   6:1
                                                                    (Other):34

Para eliminarla es un poco raro. Sabemos que para ver un elemento de un vector usamos los corchetes

> nueva.col[3]
[1] 3

nos muestra el elemento nº3 del vector nueva.col

para ver una columna, fila o celda de un dataframe los corchetes funcionan parecido [fila,columna], para ver el contenido de la segunda columna:

> dades[,2]
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4
[39] 4 4
Levels: 1 2 3 4

Si queremos borrar una columna tenemos que usar el signo «-«, por ejemplo, para borrar la columna factor3 (que es la 6ª) del dataframe:

> dades[,-6]

Esto nunca me ha parecido muy elegante, pero no he encontrado otra forma de hacerlo. Si alguien sabe una forma mejor que lo diga, o mejor, que lo escriba.

Saludos.

4 pensamientos en “Acerca de… trabajar con dataframes en R

    • Solo tienes que decirle a R que quieres poner en esa fila.
      Por ejemplo, en el dataframe de la entrada anterior, 40 observaciones en 5 columnas hariamos:
      fila.nueva<-c("a","b","c","d","e")
      dades[41,]<-fila.nueva

      Esto le dice a R en la fila 41 del dataframe pon el vector fila.nueva. Ojo, por que si hay factores en el dataframe, los valores del vector fila.nueva en esas columnas tendran que tener valores que esten en los niveles del factor.
      Más cosas sobre dataframes aquí.

Deja un comentario