2015-03-30 19 views
6

唯一我有一個數據幀,其中列有一個像請與重複值的列在數據幀

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')) 

我可以

unique(employee$name) 

獲得列1中的獨特元素但是重複的值,我想讓name列中的每個項目都是唯一的。如果第二次出現某些內容,則將_1附加到它。如果它再次出現,則附加_2。因此,在員工數據框中,我想將第二列更改爲

John 
Joe 
Mat 
John_1 
Joe_1 

除了循環播放外,還有其他方法嗎?

回答

7

我們可以使用make.namesunique=TRUE。默認情況下,.將後綴數字之前追加,並且可以通過使用_sub

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

或者通過@DavidArenburg提出了一個更好的選擇來代替。如果namefactor類,輸入列轉換爲character類(as.character)將make.unique

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

@DavidArenburg之前,也就是更漂亮。你可以考慮發佈這個單獨的答案。由於列是因素,'make.unique(as.character(employee $ name),sep =「_」)' – akrun 2015-03-30 19:11:32

+0

@DavidArenburg謝謝,那麼我將它包含在帖子 – akrun 2015-03-30 19:13:21

+0

順便說一下,它可能有可能OP有一個字符矢量,只是他在創造他可重現的例子時犯了一個錯誤。 – 2015-03-30 19:15:01