Hola,

Por si te interesa una alternativa adicional:


library(lubridate)
library(sqldf)
DF<-DB.telefonos
DF$DursecN<-seconds(as.duration(hms(DF$Duracion)))

# Tiempo y Coste Total
sqldf("select sum(DursecN) 'SumaSecs', sum(Coste) 'Coste' from DF ")

# Tiempo y Coste Total por Empresa
sqldf("select sum(DursecN) 'SumaSecs', sum(Coste) 'Coste', Empresa from DF
group by Empresa")


# Tiempo y Coste por mes
sqldf("select Mes, sum(DursecN) 'Suma-Secs', sum(Coste) 'Coste' from DF
group by Mes")

# Tiempo y Coste por Mes y Concepto
sqldf("select Mes, sum(DursecN) 'Suma-Secs', sum(Coste) 'Coste', Concepto
from DF group by Mes, Concepto")

# Tiempo y Coste por Mes y Numero
sqldf("select Mes, sum(DursecN) 'Suma-Secs', sum(Coste) 'Coste', Numero
 from DF group by Mes, Numero")

# Tiempo y Coste por Empresa, Mes, Numero, Concepto
sqldf("select sum(DursecN) 'Suma-Secs', sum(Coste) 'Coste', Empresa, Mes,
Numero, Concepto  from DF group by Empresa, Mes, Numero, Concepto")

#.....

Saludos,
Carlos Ortega
www.qualityexcellence.es



El 18 de mayo de 2012 01:27, Rubén Gómez Antolí <lobo@mucharuina.com>escribió:

> 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
>
> ______________________________**_________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/**listinfo/r-help-es<https://stat.ethz.ch/mailman/listinfo/r-help-es>
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]

