uso usar función funciona ejemplo como comando r aggregate-functions

usar - Descripción de Explain R tapply



t apply in r (2)

La excelente respuesta de @Joran me ayudó a entenderlo (por lo tanto, vote por la suya, lo habría agregado como comentario si no hubiera sido por eso), pero esto puede ser de ayuda para algunos:

En bastantes idiomas, tienes matrices bidimensionales. Según el idioma, estas matrices tienen dimensiones fijas (es decir, cada fila tiene el mismo número de columnas), o algunos idiomas permiten que el número de elementos por fila sea diferente. Así que en lugar de:

A: 1 2 3 B: 4 5 6 C: 7 8 9

Usted podría obtener algo como

A: 1 3 B: 4 5 6 C: 8

Esto se llama una matriz irregular porque, bueno, el lado derecho parece irregular. En el estilo R típico, podríamos representar esto como dos vectores:

values<-c(1,3,4,5,6,8) names<-c("A", "A", "B", "B", "B", "C")

Por tapply tanto, tapply estos dos vectores para que los primeros parámetros nos permitan aplicar esta función a cada ''fila'' de nuestra matriz irregular.

Entiendo lo que hace tapply () en R. Sin embargo, no puedo analizar esta descripción de la documentación:

Apply a Function Over a "Ragged" Array Description: Apply a function to each cell of a ragged array, that is to each (non-empty) group of values given by a unique combination of the levels of certain factors. Usage: tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)

Cuando pienso en tapply, pienso en agrupar en sql. Usted agrupa los valores en X juntos por sus niveles de factor paralelo en ÍNDICE y aplica FUN a esos grupos. He leído la descripción de tapply 100 veces y todavía no puedo entender cómo se relaciona con lo que dice. ¿Quizás alguien pueda ayudarme a analizarlo?


Veamos lo que dice la documentación de R sobre el tema:

La combinación de un vector y un factor de etiquetado es un ejemplo de lo que a veces se llama una matriz irregular, ya que los tamaños de las subclases son posiblemente irregulares. Cuando los tamaños de las subclases son todos iguales, la indexación se puede hacer de manera implícita y mucho más eficiente, como vemos en la siguiente sección.

La lista de factores que proporciona a través de INDEX conjunto especifica una colección de subconjuntos de X , posiblemente de longitudes diferentes (por lo tanto, el descriptor ''irregular''). Y luego se aplica FUN a cada subconjunto.

EDITAR: @Joris hace un excelente punto en los comentarios. Puede ser útil pensar en tapply(X,Y,...) como un envoltorio para sapply(split(X,Y),...) en el sentido de que si Y es una lista de factores de agrupación, crea una nueva, Un solo factor de agrupación basado en sus niveles únicos, divide X en consecuencia y aplica FUN a cada pieza.

EDITAR: Aquí hay un ejemplo ilustrativo:

library(lattice) library(plyr) set.seed(123) #Make this example unbalanced dat <- barley[sample(1:120,50),] #Suppose we want the avg yield by year/site: table(dat$year,dat$site) #That''s what they mean by ''ragged'' array; there are different # numbers of obs at each comb of levels #In plyr we could use ddply: ddply(dat,.(year,site),.fun=function(x){mean(x$yield)}) #Which gives the same result (listed in a diff order) as: melt(tapply (dat$yield, list (dat$year, dat$site), mean))