seleccionar repetidos filtrar filas eliminar duplicadas datos contar columnas r indexing grouping add col

repetidos - seleccionar datos en r



Crear una columna de índice basada en grupos existentes de filas(con duplicados) (1)

Usando dplyr :

df %>% mutate(index_col = cumsum(!c(+Inf,diff(Day))%in%c(0,-1)))

Explicación

c(+Inf,diff(Day))

Como quiere dos días consecutivos, calculo la diferencia en el Day con diff(Day) . Como vector de retorno diff de tamaño n-1 , tengo que agregar un valor para la parte superior del vector, elijo +Inf .

!(... %in% c(0,-1))

Pruebo que el valor es el mismo Day o Day-1 ya que deben estar agrupados, quiero cuando no es el caso.

cumsum(...)

Finalmente, uso cumsum para saber cuántos cambios ocurren.

La salida:

Es trabajo para tus dos ejemplos

> df %>% mutate(index_col = cumsum(!c(+Inf,diff(Day))%in%c(0,-1))) ID Day Count Count_group index_col 1 30004 14497 1 4 1 2 28047 14496 3 4 1 3 28049 14496 3 4 1 4 29003 14496 3 4 1 5 69012 14468 1 4 2 6 69007 14467 3 4 2 7 69012 14467 3 4 2 8 69020 14467 3 4 2 9 42003 13896 2 4 3 10 42011 13896 2 4 3 11 22001 13895 2 4 3 12 23007 13895 2 4 3 13 28047 14496 3 3 4 14 28049 14496 3 3 4 15 29003 14496 3 3 4 16 69007 14467 3 3 5 17 69012 14467 3 3 5 18 69020 14467 3 3 5 19 48005 14271 2 2 6 20 48007 14271 2 2 6 21 22001 13895 2 2 7 22 23007 13895 2 2 7 23 47011 14320 1 2 8 24 73005 14319 1 2 8 25 73005 14319 1 1 8

y

> df_2 %>% mutate(index_col = cumsum(!c(+Inf,diff(Day))%in%c(0,-1))) ID Day Count Count_group index_col 1 30004 14497 1 5 1 2 28047 14496 3 5 1 3 28049 14496 3 5 1 4 29003 14496 3 5 1 5 69012 14495 1 5 1 6 69007 14467 3 5 2 7 69012 14467 3 5 2 8 69020 14467 3 5 2 9 42003 14466 1 5 2 10 42011 14465 1 5 2 11 28047 14496 3 4 3 12 28049 14496 3 4 3 13 29003 14496 3 4 3 14 69012 14495 1 4 3 15 22001 13895 2 4 4 16 23007 13895 2 4 4 17 28047 13894 2 4 4 18 28049 13894 2 4 4 19 42003 14466 1 2 5 20 42011 14465 1 2 5 21 28047 13894 2 2 6 22 28049 13894 2 2 6 23 69012 14995 1 1 7 24 42011 14465 1 1 8

La pregunta es similar a (Actualización) Agregar columna de índice a data.frame basado en dos columnas

Aquí mi ejemplo data.frame:

df = read.table(text = ''ID Day Count Count_group 77661 14498 4 5 76552 14498 4 5 37008 14498 4 5 34008 14498 4 5 30004 14497 1 5 30004 14497 1 4 28047 14496 3 4 28049 14496 3 4 29003 14496 3 4 69012 14468 1 4 69007 14467 3 4 69012 14467 3 4 69020 14467 3 4 42003 13896 2 4 42011 13896 2 4 22001 13895 2 4 23007 13895 2 4 28047 14496 3 3 28049 14496 3 3 29003 14496 3 3 69007 14467 3 3 69012 14467 3 3 69020 14467 3 3 48005 14271 2 2 48007 14271 2 2 22001 13895 2 2 23007 13895 2 2 47011 14320 1 2 73005 14319 1 2 73005 14319 1 1'', header = TRUE)

La columna de Count muestra la suma de los valores de ID agrupados por Day . Count_group muestra la suma de los valores únicos Count vales agrupados por Day y Day -1 .

Necesito crear una columna de índice que Count_group el Count_group por Day y Day -1 siguiendo el orden descendente de la df (¡con duplicados!).

Aquí mi resultado esperado:

ID Day Count Count_group index_col 77661 14498 4 5 1 76552 14498 4 5 1 37008 14498 4 5 1 34008 14498 4 5 1 30004 14497 1 5 1 30004 14497 1 4 2 28047 14496 3 4 2 28049 14496 3 4 2 29003 14496 3 4 2 69012 14468 1 4 3 69007 14467 3 4 3 69012 14467 3 4 3 69020 14467 3 4 3 42003 13896 2 4 4 42011 13896 2 4 4 22001 13895 2 4 4 23007 13895 2 4 4 28047 14496 3 3 5 28049 14496 3 3 5 29003 14496 3 3 5 69007 14467 3 3 6 69012 14467 3 3 6 69020 14467 3 3 6 48005 14271 2 2 7 48007 14271 2 2 7 22001 13895 2 2 8 23007 13895 2 2 8 47011 14320 1 2 9 73005 14319 1 2 9 73005 14319 1 1 10

Y haz lo mismo, pero con la agrupación index_col por 3 días: Day , Day -1 y Day -2 :

df_2 = read.table(text = ''ID Day Count Count_group 30004 14497 1 5 28047 14496 3 5 28049 14496 3 5 29003 14496 3 5 69012 14495 1 5 69007 14467 3 5 69012 14467 3 5 69020 14467 3 5 42003 14466 1 5 42011 14465 1 5 28047 14496 3 4 28049 14496 3 4 29003 14496 3 4 69012 14995 1 4 22001 13895 2 4 23007 13895 2 4 28047 13894 2 4 28049 13894 2 4 42003 14466 1 2 42011 14465 1 2 28047 13894 2 2 28049 13894 2 2 69012 14995 1 1 42011 14465 1 1'', header = TRUE)

Rendimiento esperado:

ID Day Count Count_group index_col 30004 14497 1 5 1 28047 14496 3 5 1 28049 14496 3 5 1 29003 14496 3 5 1 69012 14495 1 5 1 69007 14467 3 5 2 69012 14467 3 5 2 69020 14467 3 5 2 42003 14466 1 5 2 42011 14465 1 5 2 28047 14496 3 4 3 28049 14496 3 4 3 29003 14496 3 4 3 69012 14995 1 4 3 22001 13895 2 4 4 23007 13895 2 4 4 28047 13894 2 4 4 28049 13894 2 4 4 42003 14466 1 2 5 42011 14465 1 2 5 28047 13894 2 2 6 28049 13894 2 2 6 69012 14995 1 1 7 42011 14465 1 1 8

¿Tienes alguna sugerencia? Deseo crear un código genérico que pueda aplicarse (con algunos ajustes) tanto a df, df_2 como a otros marcos de datos con una variable de agrupación de n días.