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

时间:2015-03-30 18:41:44

标签: 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'))

我可以通过

获取第1列中的唯一元素
unique(employee$name)

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

John
Joe
Mat
John_1
Joe_1

除了循环之外有没有办法呢?

1 个答案:

答案 0 :(得分:8)

我们可以将make.namesunique=TRUE一起使用。默认情况下,.将在后缀数字之前附加,_可以使用sub替换

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

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

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