Es fällt mir schwer, mich damit auseinanderzusetzen oder online eine Richtlinie zu finden.
Ich habe Mitgliedsdaten. Ich möchte sehen, wie viele Mitglieder in einem bestimmten Monat bestehen, bevor sie ihre Mitgliedschaft kündigen. Ich kann sehen, in welchem Monat sie beigetreten sind, und ich kann sehen, wie lange sie aktiv sind, indem ich mir ihre Transaktionsnummer anschaue (sie erhöht sich jeden Monat um 1). Wenn ich also die Transaktionsnummern für jeden Monat nachverfolge, kann ich einen Wasserfall darüber erhalten, wie viele Personen in diesem Monat beigetreten sind und wie hoch der Drop-off war.
Der Clou ist, dass es manchmal mehrere Transaktionen innerhalb eines Monats durch dasselbe Mitglied gibt, aber ich möchte dieses Mitglied nur einmal zählen, also müsste ich dieses Mitglied nur einmal zählen.
Name | Joined Month | Transaction no
Adam | Jan | 1
Adam | Jan | 2
Adam | Jan | 2
Ben | Jan | 1
Ben | Jan | 2
Ben | Jan | 3
Ben | Jan | 4
Cathy| Jan | 1
Donna| Feb | 1
Donna| Feb | 2
Donna| Feb | 3
Evan | Mar | 1
Evan | Mar | 1
Frank | Mar | 1
Frank | Mar | 2
Bei einer Aggregation für verschiedene Elemente mit Monaten als Spalten würde das Ergebnis etwa so aussehen:
Transaction# | Jan | Feb | March
1 | 3 | 1 | 2
2 | 2 | 1 | 1
3 | 1 | 1 | 0
4 | 1 | 0 | 0
Alle Tipps oder Hinweise in die richtige Richtung wären sehr hilfreich. Sollte ich reshape2 oder ein ähnliches Paket verwenden? Hoffentlich habe ich die Erklärung oder die Formatierung nicht zerlegt, bitte zögern Sie nicht, Fragen zu stellen.
Vielen Dank!
Unten sehen Sie ein reproduzierbares Beispiel, das die Funktionen von Ordensverse dplyr::n_distinct
und tidyr::spread
.
Ich habe Ihre Daten zuerst als Tibble dargestellt (oder Sie könnten genauso gut einen Datenrahmen verwenden).
Als nächstes gruppieren wir nach Transactionno
und JoinedMonth
vor dem Zählen verschiedener Namen. Um es in Tabellenform zu erhalten, verwenden wir tidyr::spread
. Wenn Sie die resultierenden Spalten in Monatsreihenfolge haben möchten, ist es wichtig, sicherzustellen, dass Ihr Datenrahmen sie als geordnete Faktoren enthält.
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(tibble)
library(tidyr)
x <- tribble(
~Name , ~JoinedMonth, ~Transactionno,
"Adam" , "Jan" , 1,
"Adam" , "Jan" , 2,
"Adam" , "Jan" , 2,
"Ben" , "Jan" , 1,
"Ben" , "Jan" , 2,
"Ben" , "Jan" , 3,
"Ben" , "Jan" , 4,
"Cathy", "Jan" , 1,
"Donna", "Feb" , 1,
"Donna", "Feb" , 2,
"Donna", "Feb" , 3,
"Evan" , "Mar" , 1,
"Evan" , "Mar" , 1,
"Frank" , "Mar" , 1,
"Frank" , "Mar" , 2
)
x %>%
group_by(Transactionno, JoinedMonth) %>%
summarise(ct = n_distinct(Name)) %>%
tidyr::spread(JoinedMonth, ct, fill = 0)
#> # A tibble: 4 x 4
#> # Groups: Transactionno [4]
#> Transactionno Feb Jan Mar
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1. 1. 3. 2.
#> 2 2. 1. 2. 1.
#> 3 3. 1. 1. 0.
#> 4 4. 0. 1. 0.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen