Skip to content

[R-es] Creación de data frame

5 messages · Javier Marcuzzi, Andrés Hirigoyen, Javier Nieto +1 more

#
Buenos dias, tengo una consulta con la creación de un nuevo data frame. La
primer columna, que no forma parte del data frame, toma los valores de la
variable LETRA lo cual no me permite luego seguir haciendo procedimentos ya
q no ordena. Va ejemplo

Parto de un data frame (llamado resu),  con las variables Letra, Suelo y
ha, quiero hacer uno nuevo que resuma las hectáreas (ha) por Letra.


 resu<-with(resuu data.frame( ,
                                Letra=unique(Letra),
                               Suelo=unique(Suelo),
                               ha= tapply(resulr,Suelo,sum)))
Resultado:

       Letra   Suelo   ha
a      b          2        145
b      c          2        456
c      a          2         60


Esa primer columna debería de estar numerada de forma lógica de 1 a 3 por
ejemplo. Ya intente cambiando el orden de las variables, Suelo y Letra,
pero el resultado es el mismo.

Espero haber sido claro, gracias por la ayuda
1 day later
#
Estimado Andrés Hirigoyen

Mi respuesta tiene dos partes, la primera es que no se comprende o por lo menos en mi caso, desde donde viene el problema con el código que publica, la segunda parte es suponiendo que todo estaría correcto menos el data.frame, yo crearía un nuevo data.frame solo con las columnas que deseo, luego uso el código de resumen, y puedo borrar el Segundo data.frame.

Otra forma es tomar cualquier ejemplo publicado o código propio que funcione y reemplazar los datos, el cometer un error de tipeo es muy fácil y difícil de encontrar.

Disculpas por errors idiomáticos, esta cosa me está pasando del español al inglés en forma automática.

Javier Rubén Marcuzzi

De: Andres Hirigoyen
Enviado: martes, 12 de septiembre de 2017 15:27
Para: Lista R
Asunto: [R-es] Creación de data frame

Buenos dias, tengo una consulta con la creación de un nuevo data frame. La
primer columna, que no forma parte del data frame, toma los valores de la
variable LETRA lo cual no me permite luego seguir haciendo procedimentos ya
q no ordena. Va ejemplo

Parto de un data frame (llamado resu),  con las variables Letra, Suelo y
ha, quiero hacer uno nuevo que resuma las hectáreas (ha) por Letra.


 resu<-with(resuu data.frame( ,
                                Letra=unique(Letra),
                               Suelo=unique(Suelo),
                               ha= tapply(resulr,Suelo,sum)))
Resultado:

       Letra   Suelo   ha
a      b          2        145
b      c          2        456
c      a          2         60


Esa primer columna debería de estar numerada de forma lógica de 1 a 3 por
ejemplo. Ya intente cambiando el orden de las variables, Suelo y Letra,
pero el resultado es el mismo.

Espero haber sido claro, gracias por la ayuda


_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
#
Hola Javier, gracias por tu respuesta, explico de nuevo.

Luego de varios calculos, llego a un dataframe con varias observaciones,
llamado resuu:

Letra Suelo result
1 a 2 23
2 b 2 15
3 c 2 36
4 a 3 20
5 b 3 2
6 c 3 36
7 a 2 32
8 b 2 25
9 c 3 32
...
La primer columna que no tiene cabecera o etiqueta, aparece en la consola
en color gris y es un identificador de las filas

Cuando  quiero resumir, usando

 resu<-with(resuu data.frame( ,
                                Letra=unique(Letra),
                               Suelo=unique(Suelo),
                               ha= tapply(resulr,Suelo,sum)))

El  nuevo dataframe tiene como identificador de filas los valores de la
variable LETRAS:

Letra Suelo ha
a b 2 145
b c 2 456
c a 3 60
Si quiero hacer algo con ese nuevo  dataframe, agrupar por la variable
Letra, etc. se confunde porque toma como valor de "a", "b" o "c" el
identificador y no la variable LETRAS.

Mi pregunta es como cambiar el identificado de las filas a numérico o como
evitar q pase lo que explique arriba..

Gracias


El 14 de septiembre de 2017, 10:11, Javier Marcuzzi<
javier.ruben.marcuzzi en gmail.com> escribió:

  
    
#
Hola


prueba: rownames(resu) <- NULL


Saludos
#
No acabo de ver el motivo del problema, creo haber entendido que el nombre de las filas esta tomado de la columna letra? No es posible, puesto que tus letras tienen que estar 'repetidas' ya que estas agregando y sumando...
He probado esto y ha funcionado
## minireplica de tus datosd <- data.frame(Letra=c('a','b','c','a','b','c','a','b','c'),Suelo=c(2,2,2,3,3,3,2,2,3),result=c(23,15,36,20,2,36,32,25,32))


## calculamos la tabla de contingencia (los margenes van definidos por el orden de la lista, si quieres cambiar como se agregan, cambia de orden los dos elementos de la lista)tabla <- tapply(d$result,list(d$Letra,d$Suelo),sum, simplify=TRUE)## la damos formato de tabla (trae predefinido formato matriz y necesitamos formato de tabla para expandirla con as.data.frame)class(tabla) <- 'table'## y expandimos (despuestendrias que renombrar las columnas)final <- as.data.frame(tabla)
Los identificadores de las columnas no deberian darte guerra asi.
Tambien puedes hacerlo con dos lazos, que tambien te evitaria eso que comentas:
letra <- NULLSuelo <- NULLha <- NULLfor (i in unique(d$Letra)){    for(j in unique(d$Suelo)){        letra <- c(letra,i)        Suelo <- c(Suelo,j)        tmp.sum <- sum(d$result[d$Letra==i & d$Suelo==j])        ha <- c(ha,tmp.sum)    }}out <- data.frame(letra=letra, Suelo=Suelo, ha=ha)

Saludos y espero que te sirva
Fer 

    El Viernes 15 de septiembre de 2017 1:44, Javier Nieto <mac_javi en hotmail.com> escribió:
 

 Hola


prueba: rownames(resu) <- NULL


Saludos