可能是一种解决方法,但对于那些需求不完全相同的人来说,其中的一部分可能更有用和更简单。make.names
使用该unique=T
属性添加重复的点和数字名称:
x <- make.names(tab$Column1,unique=T)
> print(x)
[1] "X1" "X1.1" "X2" "X2.1" "X3" "X4"
这对某些人来说可能已经足够了。然后,您可以在此处获取重复的元素的第一个条目,但不是未重复的元素,然后.0
在末尾添加 a。
y <- rle(tab$Column1)
tmp <- !duplicated(tab$Column1) & (tab$Column1 %in% y$values[y$lengths>1])
x[tmp] <- str_replace(x[tmp],"$","\\.0")
> print(x)
[1] "X1.0" "X1.1" "X2.0" "X2.1" "X3" "X4"
替换点并删除 X
x <- str_replace(x,"X","")
x <- str_replace(x,"\\.","_")
> print(x)
[1] "1_0" "1_1" "2_0" "2_1" "3" "4"
对你来说可能已经足够好了。但是,如果您希望索引从 1 开始,请获取数字,添加一个然后将它们放回原处。
z <- str_match(x,"_([0-9]*)$")[,2]
z <- as.character(as.numeric(z)+1)
x <- str_replace(x,"_([0-9]*)$",paste0("_",z))
> print(x)
[1] "1_1" "1_2" "2_1" "2_2" "3" "4"
就像我说的,这里有更多的解决方法,但提供了一些选项。