2016-11-29 4 views
1

Weil ich nicht weiß, wie ich mein Problem richtig beschreiben kann, schlage ich Ihnen ein Beispiel vor. Ich habe den folgenden Datenrahmen:Nummer des Auftretens einer Zeichenkette in einem Datenrahmen hinzufügen

my.data = data.frame("names" = c("Michael","Thomas","Daniel","Peter","Michael","Thomas","Ruben","Thomas")) 

die gibt:

names 
1 Michael 
2 Thomas 
3 Daniel 
4 Peter 
5 Michael 
6 Thomas 
7 Ruben 
8 Thomas 

und meine gewünschte Ausgabe ist:

 names 
1 Michael 
2 Thomas 
3 Daniel 
4  Peter 
5 Michael.2 
6 Thomas.2 
7  Ruben 
8 Thomas.3 

Hat jemand einen Vorschlag, wie es in einem automatisierten zu erreichen Weg für einen größeren Datenrahmen?

Vielen Dank im Voraus.

Antwort

1

Wir haben einige Optionen

my.data$names <- with(my.data, sub("\\.1$", "", paste(names, ave(seq_along(names), 
     names, FUN=seq_along), sep="."))) 
my.data$names 
#[1] "Michael" "Thomas" "Daniel" "Peter"  "Michael.2" "Thomas.2" "Ruben"  "Thomas.3" 

Oder die make.unique

make.unique(as.character(my.data$names)) 
#[1] "Michael" "Thomas" "Daniel" "Peter"  "Michael.1" "Thomas.1" "Ruben"  "Thomas.2" 
+0

Wow, die zweite Lösung ist recht einfach. Wusste nicht, dass diese Funktion existiert. – burton030

+0

@ burton030 Ja, es ist einfacher, aber das Suffix wird von 0,1 statt 0,2 in Ihrem erwarteten – akrun

+1

True, aber für mich ist dies auch ausreichend. Vielen Dank. – burton030

Verwandte Themen