2015-03-30 14 views
6

Mam dataframe gdzie kolumna zawiera zduplikowane wartości jakZrób kolumna z wartościami powielanych wyjątkowy w dataframe

employee <- data.frame(name = c('John', 'Joe', 'Mat', 'John', 'Joe'), 
      salary = c(1500, 2000, 1700, 1210, 2100), 
      startdate = c('2012-05-10', '2015-02-17', 
      '2014-09-11', '2011-11-23', '2010-10-27')) 

mogę uzyskać unikatowe elementy w kolumnie 1 przez

unique(employee$name) 

jednak Chcę, aby każdy element w kolumnie name był unikalny. Jeśli coś pojawi się po raz drugi, dołącz do niego _1. Jeśli pojawi się ponownie, dołącz do niego _2. Tak więc, w dataframe pracownika, chcę zmienić drugą kolumnę do

John 
Joe 
Mat 
John_1 
Joe_1 

Czy istnieje sposób, z wyjątkiem pętli nad nim?

Odpowiedz

7

Możemy użyć make.names z unique=TRUE. Domyślnie . zostanie dołączony przed numerami sufiks, a które mogą być zastąpione przez _ użyciu sub

employee$name <- sub('[.]', '_', make.names(employee$name, unique=TRUE)) 

lub lepszą opcję zaproponowaną przez @DavidArenburg. Jeśli kolumna jest factorname klasa, konwersja kolumny wejściowe do character klasy (as.character) przed nałożeniem make.unique

make.unique(as.character(employee$name), sep = "_") 
#[1] "John" "Joe" "Mat" "John_1" "Joe_1" 
+0

@DavidArenburg To jest o wiele ładniejszy. Możesz rozważyć opublikowanie tego jako osobnej odpowiedzi. Jak kolumna jest czynnikiem, 'make.unique (as.character (employee $ name), sep =" _ ")' – akrun

+0

@DavidArenburg Dzięki, to włączę to w post – akrun

+0

Btw, to może możliwe OP ma postać wektor, właśnie popełnił błąd, tworząc swój powtarzalny przykład. –