在数据框中创建一个具有唯一重复值的列

dis*_*lus 8 r 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'))
Run Code Online (Sandbox Code Playgroud)

我可以在第1列中获得独特的元素

unique(employee$name)
Run Code Online (Sandbox Code Playgroud)

但是,我想让name列中的每个项目都是唯一的.如果出现第二次出现_1的话.如果它再次出现_2.因此,在员工数据框中,我想将第二列更改为

John
Joe
Mat
John_1
Joe_1
Run Code Online (Sandbox Code Playgroud)

有没有办法除了循环它?

akr*_*run 8

我们可以使用make.namesunique=TRUE.默认情况下,.将后缀数字之前追加,并且可以被替换_使用sub

 employee$name <- sub('[.]', '_', make.names(employee$name, unique=TRUE))
Run Code Online (Sandbox Code Playgroud)

或者@DavidArenburg提出的更好的选择.如果name列是factor类,则在应用之前将输入列转换为characterclass(as.character)make.unique

 make.unique(as.character(employee$name), sep = "_")
 #[1] "John"   "Joe"    "Mat"    "John_1" "Joe_1" 
Run Code Online (Sandbox Code Playgroud)