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?