veces studio repite repetidos filas eliminar elementos duplicated duplicadas datos dato cuantas contar columnas r dataframe duplicates grouping add

studio - Expanda data.frame creando duplicados según la condición del grupo(2)



eliminar filas en r (1)

Aquí hay una solución que mantiene los valores de ID como se indica arriba.

#first add grouping variables df$smalldaygroup <- c(0,cumsum(sapply(2:nrow(df),function(i) df$Day[i]!=df$Day[i-1]))) #individual days df$bigdaygroup <- c(0,cumsum(sapply(2:nrow(df),function(i) df$Day[i]<df$Day[i-1]-1))) #blocks of consecutive days #duplicate individual days except the first in each big group df2 <- lapply(split(df,df$bigdaygroup),function(x) split(x,x$smalldaygroup)[c(1,rep(2:length(split(x,x$smalldaygroup)),each=2))]) #change the Count_group to previous value in alternate entries df2 <- lapply(df2,function(L) lapply(1:length(L),function(i) { x <- L[[i]] if(!(i%%2)) x$Count_group <- L[[i-1]]$Count_group[1] return(x) })) df2 <- do.call(rbind,unlist(df2,recursive=FALSE)) #bind back together head(df2,20) #ignore rownames! ID Day Count Count_group 01.1 18 1933 6 11 01.2 33 1933 6 11 01.3 37 1933 6 11 01.4 18 1933 6 11 01.5 16 1933 6 11 01.6 11 1933 6 11 02.7 111 1932 5 11 02.8 34 1932 5 11 02.9 60 1932 5 11 02.10 88 1932 5 11 02.11 18 1932 5 11 03.7 111 1932 5 8 03.8 34 1932 5 8 03.9 60 1932 5 8 03.10 88 1932 5 8 03.11 18 1932 5 8 04.12 33 1931 3 8 04.13 13 1931 3 8 04.14 56 1931 3 8 05.12 33 1931 3 4

A partir de la respuesta / código de @AndrewGustar : expanda data.frame creando duplicados según la condición del grupo

1) ¿Qué pasa si tengo los datos de entrada.frame con valores de ID no en secuencia y que también pueden duplicarse?

Ejemplo data.frame:

df = read.table(text = ''ID Day Count Count_group 18 1933 6 11 33 1933 6 11 37 1933 6 11 18 1933 6 11 16 1933 6 11 11 1933 6 11 111 1932 5 8 34 1932 5 8 60 1932 5 8 88 1932 5 8 18 1932 5 8 33 1931 3 4 13 1931 3 4 56 1931 3 4 23 1930 1 1 6 1800 6 10 37 1800 6 10 98 1800 6 10 52 1800 6 10 18 1800 6 10 76 1800 6 10 55 1799 4 6 6 1799 4 6 52 1799 4 6 133 1799 4 6 112 1798 2 2 677 1798 2 2 778 888 4 6 111 888 4 6 88 888 4 6 10 888 4 6 37 887 2 3 26 887 2 3 8 886 1 2 56 885 1 1'', header = TRUE)

La columna de Count muestra la cantidad total de valores de ID por cada Day y la columna de Count_group muestra la suma de los valores de ID por cada Day y Day - 1 .

por ejemplo, 1933 = Count_group 11 porque Count 6 (1933) + Count 5 (1932), y así sucesivamente.

Lo que tengo que hacer es crear observaciones duplicadas por cada Count_group y agregarlas para mostrar por cada Count_group su Day AND Day - 1 .

por ejemplo, Count_group = 11 está compuesto por los valores de Count del Day 1933 y 1932. Por lo tanto, ambos días deben incluirse en Count_group = 11. El siguiente será Count_group = 8, compuesto por 1932 y 1931, etc ...

Salida deseada:

ID Day Count Count_group 18 1933 6 11 33 1933 6 11 37 1933 6 11 18 1933 6 11 16 1933 6 11 11 1933 6 11 111 1932 5 11 34 1932 5 11 60 1932 5 11 88 1932 5 11 18 1932 5 11 111 1932 5 8 34 1932 5 8 60 1932 5 8 88 1932 5 8 18 1932 5 8 33 1931 3 8 13 1931 3 8 56 1931 3 8 33 1931 3 4 13 1931 3 4 56 1931 3 4 23 1930 1 4 23 1930 1 1 6 1800 6 10 37 1800 6 10 98 1800 6 10 52 1800 6 10 18 1800 6 10 76 1800 6 10 55 1799 4 10 6 1799 4 10 52 1799 4 10 133 1799 4 10 55 1799 4 6 6 1799 4 6 52 1799 4 6 133 1799 4 6 112 1798 2 6 677 1798 2 6 112 1798 2 2 677 1798 2 2 778 888 4 6 111 888 4 6 88 888 4 6 10 888 4 6 37 887 2 6 26 887 2 6 37 887 2 3 26 887 2 3 8 886 1 3 8 886 1 2 56 885 1 2 56 885 1 1