Wie nummerieren Sie die Beobachtungen, die basierend auf dem Wert einer Spalte

Unten ist die vereinfachte Beispiel meine Daten, die Spalte new ist die, die ich will hinzufügen, um das dataset. Im Grunde möchte ich benennen Sie die riskset die Verwendung 1,2,3,4... so, dass es dann einfacher für mich zu tun Schleifen. Die zahlen in riskset sortiert wurden, sind Sie nicht durchgängig und es sind doppelte Nummern in den riskset (10~11 für jede eindeutige Nummer), so wie eine weitere Spalte hinzufügen Gruppierung der Beobachtungen basierend auf Ihrem riskset Anzahl?

  riskset            new
a.0000000017          1
a.0000000017          1
a.0000000017          1
a.0000000017          1
a.0000000066          2
a.0000000066          2
a.0000000066          2
a.0000000066          2
a.0000000099          3
a.0000000099          3
a.0000000099          3
a.0000000099          3
a.0000000099          3
              ......

1 Antworten

  • Maurits Evers
    4. Mai 2019

    Eine einfache Basis R-Lösung wäre die Verwendung von factors und dann warf as.integer

    as.integer(as.factor(df$riskset))
    #[1] 1 1 1 1 2 2 2 2 3 3 3 3 3
    

    Oder, da Sie gefragt haben, für ein dplyr option

    df %>% mutate(new = as.integer(as.factor(riskset)))
    

    oder die base R äquivalent mit transform

    transform(df, new = as.integer(as.factor(riskset)))
    

    Eine weitere option ist die Verwendung von dplyr::lag und cumsum

    df %>% mutate(new = cumsum(riskset != lag(riskset, default = T)) + 1)
    

    Oder seit Ihr erwähnt group_by, die Sie tun könnten

    df %>% group_by(riskset) %>% group_indices()
    

    zum generieren der Gruppe von Indizes.

    group_indices funktioniert auch innerhalb von mutate

    df %>% group_by(riskset) %>% mutate(new = group_indices())
    

    Sample-Daten

    df <- read.table(text =
        "  riskset            new
    a.0000000017          1
    a.0000000017          1
    a.0000000017          1
    a.0000000017          1
    a.0000000066          2
    a.0000000066          2
    a.0000000066          2
    a.0000000066          2
    a.0000000099          3
    a.0000000099          3
    a.0000000099          3
    a.0000000099          3
    a.0000000099          3", header = T)