4 votos

La fusión de datos multidimensionales en R en un marco de datos

Estoy tratando de hacer algunas comparaciones basadas en porcentajes entre los diferentes grupos en un conjunto de datos de sentencias penales (http://dl.dropbox.com/u/1156404/wightCrimRecords.csv)

Tengo una información en un conjunto de la forma:

    $Female
    x
                             Burglary                 Criminal Damage and Arson 
                          0.004950495                               0.017326733 
                     Driving Offences                                    Murder 
                          0.371287129                               0.000000000
    $Male
    x
                             Burglary                 Criminal Damage and Arson 
                          0.013001083                               0.058504875 
                     Driving Offences                                    Murder 
                          0.303358613                               0.000000000

    $`Not Stated`
    x
                             Burglary                 Criminal Damage and Arson 
                            0.0000000                                 0.0000000 
                     Driving Offences                                    Murder 
                            0.1111111                                 0.0000000 

Esto se derivó de los datos originales de la siguiente manera:

iw=read.csv("~/data/recordlevel.csv")
iwp=tapply(iw$Offence_type,iw$AGE,function(x){prop.table(table(x))})

Lo que me gustaría hacer es generar un único marco de datos que contenga una columna de género, una columna de frecuencia y filas correspondientes a Robo, Asesinato, etc.

Puedo extraer un único dato de la matriz multidimensional, por ejemplo, usando:

iwpF =data.frame(iwp['Female'])

que genera una fila separada para cada infracción y columnas referidas al tipo y frecuencia de la infracción, pero no puede ver cómo generar una única base de datos.

P.D. También me preguntaba si es posible extraer datos aún más estructurados, que por ejemplo cuenten los porcentajes de sexo del tipo de delito y el grupo de edad, así que por ejemplo podría buscar qué porcentaje de las condenas de los varones de más de 35 años están relacionadas con el asesinato.

5voto

Mohit Jain Puntos 412

No estoy seguro de haber seguido la parte PS de tu pregunta, pero tal vez esto te lleve por el camino correcto. El truco es usar melt() para obtener los datos en formato largo, y luego usar ddply() para agruparse:

library(plyr)
library(reshape2)
iw <- read.csv("http://dl.dropbox.com/u/1156404/wightCrimRecords.csv")
iw.m <- melt(iw, id.vars = "sex", measure.vars = "Offence_type")
ddply(iw.m, "sex", function(x) as.data.frame(prop.table(table(x$value))))

Nos da:

          sex                                      Var1        Freq
1      Female                                  Burglary 0.004950495
2      Female                 Criminal Damage and Arson 0.017326733
3      Female                          Driving Offences 0.371287129
...
50      Other                           Supply of drugs 0.000000000
51      Other                             Vehicle Crime 0.000000000
52      Other                             Violent Crime 0.000000000

EDITAR - después de leer el PS de nuevo, creo que esto es lo que tenías en mente:

iw.m <- melt(iw, id.vars = c("sex", "AGE"), measure.vars = "Offence_type")
ddply(iw.m, c("sex", "AGE"), function(x) as.data.frame(prop.table(table(x$value))))

           sex   AGE                                      Var1        Freq
1       Female 18-24                                  Burglary 0.011764706
2       Female 18-24                 Criminal Damage and Arson 0.047058824
3       Female 18-24                          Driving Offences 0.188235294
....

Obviamente puedes seguir añadiendo variables de identificación que luego se pasan a plyr para agruparlas en cualquier nivel de detalle que sea suficiente para tus propósitos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X