Skip to content
Prev 387967 / 398502 Next

Group by and duplicate a value/dplyr

Hi all,

I have the following data frame?


dput(df)
? ??structure(list(Department = c("A", "A", "A", "A", "A", "A", "A",?
"A", "B", "B", "B", "B", "B", "B", "B", "B"), Class = c(1L, 1L,?
1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), Value = c(0L,?
100L, 800L, 800L, 0L, 300L, 1200L, 1200L, 0L, 0L, 400L, 400L,?
200L, 800L, 1200L, 1200L)), class = "data.frame", row.names = c(NA,?
-16L))


I would like to group by "Department" and "Class" and repeat the minimum value of "Valule" excluding zeros or get the second minimum value. The desired output is:


? ??dput(df)
? ??structure(list(Department = c("A", "A", "A", "A", "A", "A", "A",?
"A", "B", "B", "B", "B", "B", "B", "B", "B"), Class = c(1L, 1L,?
1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), Value = c(0L,?
100L, 800L, 800L, 0L, 300L, 1200L, 1200L, 0L, 0L, 400L, 400L,?
200L, 800L, 1200L, 1200L), MinValue = c(100L, 100L, 100L, 100L,?
300L, 300L, 300L, 300L, 400L, 400L, 400L, 400L, 200L, 200L, 200L,?
200L)), class = "data.frame", row.names = c(NA, -16L))

? ?
how should I change the following dplyr to give me the desired output??


? ?df <-?
? df %>%
? group_by(Department,Class) %>%
? mutate(MinValue=min(Value) )


Thanks for any help.
Elahe