2016-05-29 4 views
1

Für eine Probe Datenrahmen:Bestellung xtab BY Anteil in R

df <- structure(list(region = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
              2L, 2L, 2L, 2L), .Label = c("a", "b", "c", "d"), class = "factor"), 
        result = c(1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L), weight = c(0.126, 
                         0.5, 0.8, 1.5, 5.3, 2.2, 3.2, 1.1, 0.1, 1.3, 2.5)), .Names = c("region", 
                                         "result", "weight"), row.names = c(NA, 11L), class = "data.frame") 


df$region <- factor(df$region) 
result <- xtabs(weight ~ region + result, data=df) 
result 

Ich möchte die 1s der Ergebnisspalte neu zu ordnen. Wie ich es (from here) verstehe, konnte ich nutzen, um:

result <- result[order(result[, 2], decreasing=T),] 
result 
     result 
region 0  1 
    b 6.9 3.500 
    a 5.8 2.426 

aber dies scheint durch die Anzahl der 1s nur zu bestellen - ich will stattdessen den Anteil von 1 s in jeder Region (das heißt in Prozent) verwenden. Wie kann ich die Bestellung (oder etwas anderes) verwenden, um meine Xtab so zu entwickeln, wie ich es möchte?

Antwort

4

Verwendung prop.table:

result[order(prop.table(result,1)[,2], decreasing=TRUE),] 
#  result 
#region 0  1 
#  b 6.9 3.500 
#  a 5.8 2.426 

Wo prop.table(result,1) gibt:

prop.table(result,1) 
#  result 
#region   0   1 
#  a 0.7050814 0.2949186 
#  b 0.6634615 0.3365385 
+0

@thelatemail - offensichtlich nicht klar von mir erklärt, aber das ist perfekt. Vielen Dank. –