salida inesperada del agregado

Mientras se experimenta conaggregate para otra preguntaaquí, Me encontré con un resultado bastante extraño. No puedo entender por qué y me pregunto si lo que estoy haciendo es totalmente incorrecto.

Supongamos que tengo undata.frame Me gusta esto:

df <- structure(list(V1 = c(1L, 2L, 1L, 2L, 3L, 1L), 
                     V2 = c(2L, 3L, 2L, 3L, 4L, 2L), 
                     V3 = c(3L, 4L, 3L, 4L, 5L, 3L), 
                     V4 = c(4L, 5L, 4L, 5L, 6L, 4L)), 
                  .Names = c("V1", "V2", "V3", "V4"), 
        row.names = c(NA, -6L), class = "data.frame")
> df
#   V1 V2 V3 V4
# 1  1  2  3  4
# 2  2  3  4  5
# 3  1  2  3  4
# 4  2  3  4  5
# 5  3  4  5  6
# 6  1  2  3  4

Ahora, si quiero dar salida a undata.frame confilas únicas con una columna adicional que indica su frecuencia endf. Para este ejemplo,

#   V1 V2 V3 V4 x
# 1  1  2  3  4 3
# 2  2  3  4  5 2
# 3  3  4  5  6 1

Obtuve esta salida usandoaggregate experimentando de la siguiente manera:

> aggregate(do.call(paste, df), by=df, print)

# [1] "1 2 3 4" "1 2 3 4" "1 2 3 4"
# [1] "2 3 4 5" "2 3 4 5"
# [1] "3 4 5 6"
#   V1 V2 V3 V4                         x
# 1  1  2  3  4 1 2 3 4, 1 2 3 4, 1 2 3 4
# 2  2  3  4  5          2 3 4 5, 2 3 4 5
# 3  3  4  5  6                   3 4 5 6

Por lo tanto, esto me dio la cadena pegada. Por lo tanto, si tuviera que usarlength en lugar deprint, debería darme el número de tales ocurrencias, que es el resultado deseado, que fue el caso (como se muestra a continuación).

> aggregate(do.call(paste, df), by=df, length)
#   V1 V2 V3 V4 x
# 1  1  2  3  4 3
# 2  2  3  4  5 2
# 3  3  4  5  6 1

Y esto parecía funcionar. Sin embargo, cuando eldata.frame Las dimensiones son 4 * 2500, la salida.data.frame es 1 * 2501 en lugar de 4 * 2501 (todas las filas son únicas, por lo que la frecuencia es 1).

> df <- as.data.frame(matrix(sample(1:3, 1e4, replace = TRUE), nrow=4))
> o <- aggregate(do.call(paste, df), by=df, length)
> dim(o)
# [1]    1 2501

Probé con data.frames más pequeños con solo filas únicas y me da la salida correcta (cambionrow=40, por ejemplo). Sin embargo, cuando las dimensiones de la matriz aumentan, esto no parece funcionar. ¡Y simplemente no puedo entender qué está mal! ¿Algunas ideas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta