Может быть немного больше обходного пути, но часть этого может быть более полезной и простой для кого-то с не совсем такими же потребностями. make.names
с атрибутом unique=T
добавляет точку и нумерует имена, которые повторяются:
x <- make.names(tab$Column1,unique=T)
> print(x)
[1] "X1" "X1.1" "X2" "X2.1" "X3" "X4"
Этого может быть достаточно для некоторых людей. Здесь вы можете взять первые записи элементов, которые повторяются, но не элементы, которые не повторяются, а затем добавить .0
в конец.
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"
Как я уже сказал, здесь больше обходного пути, но есть несколько вариантов.
person
Cão
schedule
27.10.2017