I have the dataframe below
vol<-structure(list(activity = c("RAAMELK", "RAAMELK", "Separering",
"Separering", "Sweetmilk Pasteurizer 8331", "Sweetmilk Pasteurizer 8331",
"9004 - T42 kartong 70x70", "9004 - T42 kartong 70x70", "9006 - T61 BIB",
"9006 - T61 BIB", "9004 - T41 kartong 70x70", "9004 - T41 kartong 70x70"
), qty = c(0, 31, 31, 9, 31, 31, 6, 6, 3, 3, 28, 28), in_out = c("in",
"out", "in", "out", "in", "out", "in", "out", "in", "out", "in",
"out"), qty_scrap = c(0, 0, 0, 0, 0, -270.64, 0, 524, 0, 260,
0, 0)),
row.names = c(NA, -12L), case_id = "case_id", activity_id = "activity",
activity_instance_id = "action", lifecycle_id = "registration_type",
resource_id = "resource", timestamp = "timestamp",
class = c("eventlog", "log", "tbl_df", "tbl", "data.frame"))

And I want to subtract the values on column qty based on if they have the same value in column activity and with the logic in-out from the in_out column. The result will be saved in the qty_scrap column.
The result dataframe will then have 4 columns. The activity column with the unique name of the activity, the in column with the in value of the qty, the out column with the out value of the qty and the qty_scrap column with their difference.
CodePudding user response:
You could try this:
vol %>%
group_by(activity) %>%
mutate(qty_scrap = head(qty, 1) - tail(qty, 1)) %>%
tidyr::pivot_wider(names_from = in_out, values_from = qty) %>%
select(activity, `in`, out, qty_scrap)
Output
# activity `in` out qty_scrap
# <chr> <dbl> <dbl> <dbl>
# 1 RAAMELK 0 31 -31
# 2 Separering 31 9 22
# 3 Sweetmilk Pasteurizer 8331 31 31 0
# 4 9004 - T42 kartong 70x70 6 6 0
# 5 9006 - T61 BIB 3 3 0
# 6 9004 - T41 kartong 70x70 28 28 0
CodePudding user response:
You can reshape your data to a wider format, and then mutate your scrape column by subtracting the in and out columns.
library(dplyr)
library(tidyr)
vol %>%
pivot_wider(id_cols = "activity", names_from = "in_out", values_from = "qty") %>%
mutate(qty_scrap = `in` - out)
#> # A tibble: 6 x 4
#> activity `in` out qty_scrap
#> <chr> <dbl> <dbl> <dbl>
#> 1 RAAMELK 0 31 -31
#> 2 Separering 31 9 22
#> 3 Sweetmilk Pasteurizer 8331 31 31 0
#> 4 9004 - T42 kartong 70x70 6 6 0
#> 5 9006 - T61 BIB 3 3 0
#> 6 9004 - T41 kartong 70x70 28 28 0
Created on 2023-01-24 by the reprex package (v2.0.1)
