[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