Substring, Pad und Paste Spalten im Datenframe ohne Schleife

8

Ich habe diesen Datenrahmen, er sieht so aus:

Ich muss das erste Zeichen aus der Spalte an nehmen, den ganzen Wert in einem, dann setze einen Zähler auf das Ende, das für Wiederholungen in der Spalte ansteigt. Dieser Zähler muss immer drei sein. Das Endergebnis ist dies:

So nichts hier so dramatisch, ich konnte dies mit dem folgenden Code tun (bereit, beeindruckt zu sein):

%Vor%

Ich bin so unzufrieden mit diesem Debakel. Es scheint nicht sehr "R" und ich würde es sehr gerne zulassen, dass dies nicht das Tageslicht erblickt. Wie kann ich das mehr "R" machen?

Ich schätze den Rat.

    
DieselBlue 21.07.2017, 19:37
quelle

4 Antworten

8
%Vor%     
CPak 21.07.2017, 19:53
quelle
8

Die Funktionen rleid und rowid aus data.table können hier nützlich sein:

%Vor%

Wie es funktioniert:

  • sprintf von der Basis macht effektiv den Job von stringr::str_pad im OP.
  • rleid gruppiert Wiederholungswerte zusammen.
  • rowid erstellt innerhalb jeder Gruppe einen Zähler.
Frank 21.07.2017 19:59
quelle
6

In der Basis R können Sie sprintf verwenden, um 0s zu puffern, und ave, um die Anzahl wie folgt zu erhalten:

%Vor%

ave führt die Gruppenberechnungen durch und seq_along zählt die Zeilen.

was zurückgibt

%Vor%     
lmo 21.07.2017 19:58
quelle
3

Das funktioniert:

%Vor%

Ausgabe:

%Vor%

Hoffe, das hilft!

    
Florian 21.07.2017 19:52
quelle

Tags und Links