2017-10-12 1 views
0

Ich habe Probleme, meine Daten so zusammenzufassen, wie ich es möchte. Ich habe mich gefragt, ob jemand darauf hinweisen könnte, wo ich falsch liege. Unten ist eine Teilmenge meiner Daten. Es kam aus dem General Social Survey und die Dimensionen meiner Daten eingestellt waren 2x33500Wie fasst man Daten zusammen und erstellt eine neue Spalte?

   class owngun 
32997 Middle Class  No 
8246 Working Class  No 
13613 Middle Class  Yes 
31553 Middle Class  No 
31316 Working Class  No 
20083 Middle Class  Yes 
26289 Middle Class  No 
29363 Middle Class  No 
25821 Working Class Refused 
4996 Middle Class  Yes 
14641 Middle Class  Yes 
15523 Middle Class  Yes 
27361 Working Class  Yes 
29035 Working Class  Yes 
25330 Middle Class  No 
16424 Lower Class  Yes 
17535 Working Class  No 
2841 Working Class  No 
18465 Middle Class  No 
16629 Middle Class  Yes 

Wenn ich eine Tabelle für meine Daten-Set generieren:

   owngun 
class   Yes No Refused 
    Lower Class 480 1254  21 
    Working Class 6519 8752  142 
    Middle Class 6216 8915  124 
    Upper Class 391 678  7 
    No Class   0 1  0 

ich diese Werte mögen, aber was ich wirklich interessiert an den Anteilen von Ja für jede soziale Klasse. Wie erzeuge ich eine neue Spalte mit den Anteilen von Ja für jede soziale Klasse?

Ich habe versucht, dplyr verwenden, um dies zu tun. Kann jemand einen Weg vorschlagen, um fortzufahren?

Danke

+0

Wahrscheinlich 'table' oder' prop.table'. – lmo

Antwort

1

Sie können eine neue Spalte erstellen. Ich nehme an, dass der Name des Datenrahmens, den du generiert hast, Eigenname heißt. Deshalb:

owngun = mutate(owngun, Yes_percent = Yes/(Yes + No + Refused)) 
1

das Bit von Daten, die Sie zur Verfügung gestellt: mit der dplyr mutate Funktion

table(df$class, df$owngun)/as.vector(table(df$class)) 

         No Refused  Yes 
    Lower Class 0.0000000 0.0000000 1.0000000 
    Middle Class 0.5000000 0.0000000 0.5000000 
    Working Class 0.5714286 0.1428571 0.2857143 

Daten

### Your data 
df = read.table(text="class owngun 
32997 'Middle Class'  No 
8246 'Working Class'  No 
13613 'Middle Class'  Yes 
31553 'Middle Class'  No 
31316 'Working Class'  No 
20083 'Middle Class'  Yes 
26289 'Middle Class'  No 
29363 'Middle Class'  No 
25821 'Working Class' Refused 
4996 'Middle Class'  Yes 
14641 'Middle Class'  Yes 
15523 'Middle Class'  Yes 
27361 'Working Class'  Yes 
29035 'Working Class'  Yes 
25330 'Middle Class'  No 
16424 'Lower Class'  Yes 
17535 'Working Class'  No 
2841 'Working Class'  No 
18465 'Middle Class'  No 
16629 'Middle Class'  Yes", 
header=TRUE) 
0

Diese Lösung verwendet nicht dplyr aber wie?

tab <- table(df) 
prop.table(tab, margin = 1) 
Verwandte Themen