[R-es] Agrupación de valores de variable definida en fila y objeto temporal

Rubén Gómez Antolí lobo en mucharuina.com
Vie Mayo 18 01:27:26 CEST 2012


Hola:

Os consulto dos cosas porque llevo unos días bastante espeso y no soy 
capaz de sacarlo, seguro que es muy fácil, pero no doy con ello.

Estoy analizando unas facturas de gastos telefónicos y parto de un 
data.frame de esta forma:

DB.telefonos<-data.frame(
   Empresa=c(rep("Empr.1",3),rep("Empr.2",3)),
   Numero=c(rep(666666666,3),rep(666666667,3)),
   Extension=c(rep(2001,3),rep(2002,3)),
   Mes=c(rep(c("Marzo","Febrero","Enero"),2)),
   Concepto=c(rep(c("Fijos","Móviles","Móv. otra comp."),2)),
   Duracion=c("05:32:00","132:28:00",
	"98:65:00","78:32:00","21:09:00","11:11:00"),
   Coste=c(10.82,13.56,67.32,9.76,17.23,79.18),
   Descuento=c(0.0,0.6,0.6,0.0,0.6,0.6)
)

Lo que quiero es obtener gráficos y tablas con resúmenes de duraciones 
totales por tipo de llamada, por línea, por mes... vamos, lo usual.

El primer problema es que soy incapaz de crear subtablas a partir de las 
variables que me interesen de una forma fácil.

Lo he conseguido de esta forma:

Tipos.llamadas.1<-levels(DB.telefonos$Concepto)[c(2,3)]

aux1<-sapply(Tipos.llamada.1,
    function (x) which(DB.telefonos$Concepto == x))

aux1<-sort(as.integer(unlist(aux1)))

Duracion.llamadas.moviles<-DB.telefonos[c(aux1),c(1:4,6)]

Estoy casi seguro de la existencia de una forma más directa y sencilla 
de conseguir lo mismo, pero me sigo sin aclarar con stack, aggregate y 
demás parientes como melt y cast del paquete Reshape.

Segundo problema: la duración. Si os habéis fijado viene de esta forma 
00:00:00, que viene a significar MM:SS:MsMs. (El campo de los MsMs es 
obra y gracia de la hoja de cálculo de Libreoffice, he sido incapaz de 
dejar solo los MM:SS, por eso están siempre a cero.)

Como lo que quiero trabajar son tiempos, lo lógico es pasarlo a un 
objeto de ese tipo. He repasado la clase Zoo, el paquete Chron, 
Lubridate y otros sin atinar en como hacerlo.

Como ya digo estoy bastante espeso estos últimos días así que si alguno 
tiene a bien señalarme la Luna... (intentaré mirar la Luna y no el dedo)

Gracias por adelantado.

Salud y Revolución.

Lobo.
-- 
Libertad es poder elegir en cualquier momento. Ahora yo elijo GNU/Linux,
para no atar mis manos con las cadenas del soft propietario.
---------
Desde El Ejido, en Almería, usuario registrado Linux #294013
http://www.counter.li.org



Más información sobre la lista de distribución R-help-es