我有一个数据框,其中列具有重复值,如
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
除了循环之外有没有办法呢?
答案 0 :(得分:8)
我们可以将make.names
与unique=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"