Frage:
Berechnung der Anteile nach Alter in R.
GKED
2011-03-04 00:48:35 UTC
view on stackexchange narkive permalink

Ich arbeite an diesem Datensatz mit Familienstand und Alter. Ich möchte den Prozentsatz des nie verheirateten Mannes gegen jedes Alter darstellen. Könnten Sie mir bitte helfen, herauszufinden, wie es in R geht? Bisher habe ich zwei separate Arrays mit Männern erstellt, die niemals heiraten und jemals heiraten. Ich weiß, wie viele Fälle von jedem ich habe. Was ich tun muss, ist, die Anzahl der Personen, die in jedem Alter nie verheiratet waren, zu zählen und durch die Gesamtzahl der nie verheirateten Personen zu dividieren, um einen Prozentsatz zu erhalten. Ich hoffe ich war klar. Vielen Dank

Könnten Sie einen Ausschnitt Ihrer Daten veröffentlichen, damit wir eine bessere Vorstellung davon haben, was Sie manipulieren möchten?
Drei antworten:
#1
+10
Bernd Weiss
2011-03-04 01:44:18 UTC
view on stackexchange narkive permalink

Ihr Ansatz erscheint mir viel zu kompliziert. Beginnen wir mit einigen Daten:

  ## bilden einen Datenstatus <-Faktor (rbinom (1000, 1, 0,3), Labels = c ("ledig", "verheiratet")) Alter < - Beispiel (20:50, 1000, Ersetzen = WAHR) df <- data.frame (Status, Alter) Kopf (df)  

Drucken Sie die ersten sechs Fälle aus:

  > head (df) status age1 verheiratet 212 single 503 single 434 single 285 verheiratet 286 single 40  

Als nächstes müssen wir zeilenweise Prozentsätze berechnen; Auch wenn ich bezweifle, dass dies sinnvoll ist (es bezieht sich auf Ihre Aussage: "Was ich tun muss, ist, die Anzahl der Personen, die in jedem Alter nie verheiratet waren, zu zählen und durch die Gesamtzahl der nie verheirateten Personen zu dividieren, um einen Prozentsatz zu erhalten. ").

  ## zeilenweise Prozentsätze berechnen (ist es das, wonach Sie suchen?) (Registerkarte <-prop.table (Tabelle (df), 1) * 100)  

Die resultierende Tabelle sieht folgendermaßen aus:

  > (Registerkarte <-prop.table (Tabelle (df), 1) * 100) agestatus 20 21 22 23 24 25 26 single 1.857143 3.142857 3.428571 2.285714 2.142857 2.857143 3.428571 verheiratet 2.333333 2.333333 5.666667 1.333333 3.333333 5.333333 2.000000 agestatus 27 28 29 30 31 32 33 single 2.857143 3.142857 3.428571 3.286 3.1400 37 38 39 40 single 3.000000 2.857143 5.000000 3.571429 2.857143 3.571429 3.000000 verheiratet 3.333333 4.000000 4.000000 2.333333 2.000000 2.000000 2.000000 agestatus 41 42 43 44 45 46 47 single 4.285714 3.000000 3.714286 3.8571433 3.3300 2.6
single 2.857143 3.428571 4.857143 verheiratet 2.333333 3.000000 3.666667  

Wenn Sie also zeilenweise zusammenfassen, ergibt sich eine 100% ige

  >-Summe (Tab [1, ]) [1] 100  

Zeichnen Sie es schließlich.

  ## plot itplot (as.numeric (dimnames (tab) $ age), tab [1,], xlab = "Age", ylab = "Single [%]")  

enter image description here

Vielen Dank. Genau das habe ich versucht.
#2
+5
Matt Parker
2011-03-04 01:57:08 UTC
view on stackexchange narkive permalink

Ich habe kürzlich etwas Ähnliches gemacht. Es gibt einige Möglichkeiten, Daten wie diese in R zu aggregieren, aber die Funktion ddply aus dem Paket plyr ist meine Sicherheitsdecke, und ich wende mich für solche Dinge an sie

Ich gehe davon aus, dass Sie für jede Person in Ihrem Datensatz individuelle Datensätze mit Alter, Geschlecht und Familienstand haben. Für diesen Ansatz müssen die Daten nicht in mehrere Tabellen aufgeteilt werden. Wenn Sie Frauen in der Originaltabelle haben, lassen Sie sie einfach in und fügen Sie Sex als Gruppierungsvariable hinzu.

  require (plyr) results.by.age <-ddply (.data = yourdata, .var = c ("Geschlecht", "Alter"), .fun = Funktion (x) {data.frame (n = nrow (x), ever.married .n = nrow (Teilmenge (x, Familienstand% in% c ("verheiratet", "geschieden"))), ever.married.prop = nrow (Teilmenge (x, Familienstand% in% c ("verheiratet") "," Geschieden "))) / nrow (x))})  

Dies teilt den data.frame yourdata ​​code> durch eindeutige Kombinationen der Variablen auf Geschlecht und Alter . Anschließend wird für jeden dieser Blöcke (als x bezeichnet) die Anzahl der Personen berechnet, die zu dieser Gruppe gehören ( n ), wie viele von ihnen verheiratet sind ( ever.married.n ) und welcher Anteil von ihnen ist verheiratet ( ever.married.prop ). Es wird dann ein Datenrahmen mit dem Namen results.by.age mit Zeilen wie

  Geschlecht Alter n ever.married.n ever.married.prop "Male" zurückgegeben. 25 264 167 0,633  

Dies ist vielleicht nicht der eleganteste oder effizienteste Weg, dies zu tun, aber dieses allgemeine Muster war für mich sehr hilfreich. Ein Vorteil davon ist, dass Sie einfach und transparent alle gewünschten Statistiken aus der Teilmenge erfassen können. Dies kann hilfreich sein, wenn Sie dem Diagramm beispielsweise eine Regressionslinie hinzufügen möchten (Gewichtung mit n ). oder haben sowohl männliche als auch weibliche Proportionen auf derselben Handlung und färben die Punkte nach Geschlecht.


Hier ist eine überarbeitete Version, die die Funktion summieren () von plyr verwendet - den Effekt ist dasselbe, aber summarize () hat einige entscheidende Vorteile: - Es funktioniert in der Umgebung der aktuellen Teilmenge - anstatt x $ marital.status einzugeben, Ich kann einfach marital.status eingeben. - Ich kann auf andere Variablen verweisen, die ich bereits erstellt habe, was Prozentsätze, Transformationen und dergleichen viel einfacher macht. Wenn ich bereits num und denom erstellt habe, wird die Der Anteil von num ist nur num / denom .

  results.by.age <-ddply (.data = yourdata, .var = c ("Geschlecht", "Alter"), .fun = zusammenfassen, n = Länge (Familienstand), ever.married = Summe (Familienstand% in% c ("verheiratet", "geschieden")), ever .married.prop = ever.married / n # Bezieht sich auf Vars, die ich gerade erstellt habe)  
#3
+2
nico
2011-03-04 01:29:43 UTC
view on stackexchange narkive permalink

Wahrscheinlich benötigen Sie Tabelle oder Aggregat . Wenn Sie weitere Details hinzufügen, kann ich Ihnen eine ausführlichere Erklärung geben.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...