Para una data.table (o data.frame) en R, deseo encontrar todas las filas que contengan un valor en la columna 'value' que están a una distancia dada 'distance 'de otro que valora en fila con la misma clave. Por lo tanto, teniendo en cuenta lo siguiente:Encontrar filas con una diferencia dada entre valores en una columna
distance <- 22
key value
A 1
B 1
C 1
D 1
A 4
B 4
A 23
B 23
B 26
B 26
C 30
me gustaría anotado la tabla original con una cuenta de cuántas filas existir con la misma clave y un valor que es 22 de ella:
key value count
A 1 1
B 1 1
C 1 0
D 1 0
A 4 0
B 4 2
A 23 0
B 23 0
B 26 0
B 26 0
C 30 0
No sé realmente por dónde empezar con este enfoque autorreferencial para manipular datos en R. Mis intentos iniciales implicaron crear una segunda tabla e intentar hacer coincidir eso, pero eso parecía un enfoque extraño y pobre.
Nota: Estoy usando el paquete data.table
, pero estoy contento de trabajar desde data.frame en este caso si eso hace las cosas más fáciles.
reproducible:
require(data.table)
source <- data.table(data.frame(key=c("A","B","C","D","A","B","A","B","B","B", "C"),value=c(1,1,1,1,4,4,23,23,26,26,30)))
result <- data.table(data.frame(key=c("A","B","C","D","A","B","A","B","B","B","C"),value=c(1,1,1,1,4,4,23,23,26,26,30),count=c(1,1,0,0,0,2,0,0,0,0,0)))
Gracias, ¿puedes explicar la línea que asigna el resultado $ count? ¿Para qué es .N for y [[3]]? – Ina
Claro. Acabo de agregar algunos comentarios en el código, que comienzan a descomprimir los datos.sintaxis compacta de la llamada de tabla. –
¡Muy bien, gracias! – Ina