El paquete data.table en R proporciona la opción:determinan índices de fila de los miembros del grupo data.table
que: 'TRUE' devuelve los números de fila número entero de 'x' que 'i' coincidencias con .
Sin embargo, no veo manera de obtener, dentro de j
, los números de fila número entero de 'x' dentro de los grupos establecidos usando by
.
Por ejemplo, dada ...
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6))
... Me gustaría saber los índices en DT para cada valor de y.
El valor para mí es que estoy usando una tabla de datos en paralelo con otra estructura de datos (ADS) a la que pretendo realizar cálculos agrupados basados en las agrupaciones calculadas de manera eficiente de la tabla de datos.
Por ejemplo, suponiendo ADS es un vector con un valor para cada fila de DT:
ADS<-sample(100,nrow(DT))
puedo, como una solución, calcular la media de GroupWise de ADS determinado por DT $ y el grupo si primero agregue una nueva columna de secuencia a data.table.
DT[,seqNum:=seq_len(nrow(DT))]
DT[,mean(ADS[seqNum]),by=y]
Lo que da el resultado que quiero a costa de agregar una nueva columna.
Soy consciente de que en este ejemplo que puedo obtener la misma respuesta usando tapply:
tapply(ADS,DT$y,mean)
Sin embargo, no voy a continuación, obtener la ventaja de rendimiento de data.tables agrupación eficiente (especialmente cuando el '' por columnas están indexados).
¿Quizás hay alguna sintaxis que estoy pasando por alto?
Quizás esta sea una característica fácil de agregar a data.table y debería solicitarla (wink, wink) ???
sintaxis propuesta: ajustarse opcionalmente '.which' a los índices de grupo, lo que permite a escribir:
DT[,mean(ADS[.which]),by=y,which=TRUE]
Me temo que no sigo. ¿Puede dar un ejemplo de un cálculo que desea realizar entre ADS y DT? –
Azul, sí di un ejemplo de trabajo ... mi última línea de código es computar la media a nivel de grupo en ADS usando índices de DT. En mi _real_ aplicación, la estructura de datos ADS NO es un vector sino un objeto 'GenomicRanges', y mi DT es un metadato sobre los rangos. En cualquier caso, Josh y Matthew, a continuación, están 'en el caso'. ¡Gracias! – malcook