Pregunta

Me gustaría hacer una columna de (posiblemente) cadenas no únicas en una columna de cadenas únicas.

Por ejemplo, considere:

df <- data.frame(
     'Initials' = c("AA","AB","AB")
     , 'Data' = c(1,2,3)
 )
df
  Initials Data
1       AA    1
2       AB    2
3       AB    3

Me gustaría obtener esto:

  Initials Data    
1       AA        1
2       AB (1)    2
3       AB (2)    3

¡Gracias!

Nota: Sé que podría usar los Rownames para identificar de manera única la fila, pero me gustaría retener la cadena almacenada en la columna inicial, con un número adjunto.

¿Fue útil?

Solución

transform(df, Initials = ave(as.character(Initials), Initials, 
       FUN = function(x) if (length(x) > 1) paste0(x, " (", seq(x), ")") else x))

#   Initials Data
# 1       AA    1
# 2   AB (1)    2
# 3   AB (2)    3

Otros consejos

w <- ave(df$Data, df$Initials, FUN = seq_along )
> df$Initials <- paste(df$Initials, "(", w, ")", sep = "")
# > df
#   Initials Data
# 1    AA(1)    1
# 2    AB(1)    2
# 3    AB(2)    3
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top