2016-05-07 16 views
0

Ich habe einen Datenrahmen, der eine Reihe von Geschäften zeigt, die einen Gesundheits- und Sicherheitstest hatten. Innerhalb dieses Datenrahmens habe ich den Namen des Shops und einen Faktor, der das Ergebnis des Tests an einem bestimmten Tag anzeigt.Erstellen Sie einen Datenrahmen mit% Faktor

head(facttab) 
    new_table.dba_name new_table.results 
1   QUICK SUB Out of Business 
2    BAR BARI    Pass 
3 FOOD FIRST CHICAGO    Pass 
4 TRATTORIA ISABELLA    Pass 
5 DELI-TIME, L.L.C.    Pass 
6 GREAT AMERICAN BAGEL    Fail 
>  

facttab <- data.frame(new_table$dba_name, new_table$results) 
    head(table(facttab)) 

new_table.dba_name    Fail No Entry Not Ready Out of Business Pass Pass w/ Conditions 
    1 2 3 EXPRESS      1  0   0    0 0     0 
    1155 CAFETERIA      0  0   0    0 1     0 
    16TH ST FOOD MART     0  0   0    1 0     0 
    194 RIB JOYNT     0  1   0    0 0     0 
    24HR MINI MART & CELLAR FOR YOU 1  0   0    0 0     0 
    7-ELEVEN       0  0   0    0 4     2 

Ich möchte eine andere Tabelle oder Datenrahmen bauen, die das% der gesamten Ergebnisse der Tests für jedes Geschäft über den gesamten Datenrahmen zeigt, so kann ich sehen, wer das größte% hat versagt und den größte% Pass.

Die resultierende Tabelle wäre ähnlich wie oben für Beispiel 7-Eleven wäre - 0%, kein Eintrag - 0%, nicht bereit - 0%, aus dem Geschäft 0%, Pass - 66% und Pass w/Bedingungen - 33%.

+3

Bitte lesen Sie die Informationen über [wie eine gute Frage] (http://stackoverflow.com/help/how-to-ask) und wie ein [reproduzierbares Beispiel] zu erhalten (http: // stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Jaap

+0

Danke, ich habe mir das angeschaut und einige Änderungen vorgenommen – Grabdegood

+2

'prop.table (Tabelle (factab), 1)' – bouncyball

Antwort

0

Ich dachte, ich würde eine Antwort aufpeitschen. So konvertieren Sie die prop.table in eine data.frame. Ich bin mir sicher, dass es einen schnelleren Weg dafür gibt. Beachten Sie, dass ich ein Dataset verwende, das ich selbst erstellt habe. Es wäre wahrscheinlich hilfreich sein, zu sehen ?reshape

set.seed(123) 
#create some dummy data 
df <- data.frame(store = sample(c('a','b','c'), 100, replace = T), 
       status = sample(c('foo','bar','haz'), 100, replace = T)) 
#convert to prop.table 
(prop.t <- prop.table(table(df$store, df$status), 1)) 

      bar  foo  haz 
    a 0.4242424 0.2121212 0.3636364 
    b 0.4117647 0.4117647 0.1764706 
    c 0.3636364 0.3030303 0.3333333 

#coerce to data.frame 
(prop.t.df <- data.frame(prop.t)) 

    Var1 Var2  Freq 
1 a bar 0.4242424 
2 b bar 0.4117647 
3 c bar 0.3636364 
4 a foo 0.2121212 
5 b foo 0.4117647 
6 c foo 0.3030303 
7 a haz 0.3636364 
8 b haz 0.1764706 
9 c haz 0.3333333 

#use reshape() 
(reshape(prop.t.df, direction = 'wide', idvar = 'Var1', v.names = 'Freq', timevar = 'Var2')) 

    Var1 Freq.bar Freq.foo Freq.haz 
1 a 0.4242424 0.2121212 0.3636364 
2 b 0.4117647 0.4117647 0.1764706 
3 c 0.3636364 0.3030303 0.3333333 

Offensichtlich würden Sie vermutlich mit den Namen ein wenig herumprobieren möchten, aber dies ist ein Weg, um auf das, was Sie wollen.

PS Ein anderer Weg, um es zu bekommen ist:

prop.t.df2 = as.data.frame.matrix(prop.t) 

Hinweis: Sie wahrscheinlich eine neue Spalte Store durch Zugriff auf die row.names von prop.t.df2 genannt schaffen bräuchten.

prop.t.df2$Store = row.names(prop.t.df2) 
Verwandte Themen