Desejo percorrer meu quadro de dados e alterar o valor de uma das células para evitar duplicatas.
myDf
name day score
joe monday 16
joe monday 16
harry wednesday 88
harry thursday 55
james tuesday 10
will monday 10
harry wednesday 88
joe tuesday 16
joe monday 16
Aqui tenho linhas duplicadas, então para torná-las únicas e manter os dados, desejo colar o número da tentativa após a pontuação, assim:
mydf_new
name day score
joe monday 16 (a1)
joe monday 16 (a2)
harry wednesday 88 (a1)
harry thursday 55
james tuesday 10
will monday 10
harry wednesday 88 (a2)
joe tuesday 16
joe monday 16 (a3)
O principal problema que estou tendo é como fazer um loop pelos meus dados e agrupar todas as linhas que não são únicas. Consegui identificá-las usando, dupSax = sax = which(duplicated(c(paste(myDf$name, myDf$day, myDf$score)))|duplicated(c(paste(myDf$name, myDf$day, myDf$score)), fromLast = TRUE))
mas quando faço meu loop, não tenho certeza de como pegar todas as linhas que se relacionam em vez de linha por linha. Também entendo que essa pode não ser a maneira mais fácil de fazer isso.
Criei uma nova coluna (
identifier
) para a saída para que a coluna originalscore
não seja alterada.Podemos agrupar os dados por
name
eday
, se o número de linhas em um grupo for maior que 1, criamos uma sequênciaa1
ea2
a colamos comscore
valor.e a mesma lógica traduzida na base R:
Sua saída proposta parece muito abaixo do ideal. Eu faria algo assim:
Torne as linhas únicas combinando o ID do grupo e uma numeração consecutiva
saída