Предполагая per feature_id и object_type_id , рассмотрите возможность разделения хронология столбца по дефису в within
, затем вызовите aggregate
, где вы передаете два столбца взапустить две функции с окончательной очисткой столбца в конце.
# ASSIGN NEW COLS TO SPLIT chronology
df <- within(df, {
chronology <- as.character(chronology)
start_chronology <- as.numeric(sapply(strsplit(chronology, '-'), `[`, 1))
stop_chronology <- as.numeric(sapply(strsplit(chronology, '-'), `[`, 2))
date_id <- NULL
chronology <- NULL
})
df
# feature_id object_type_id amount start_chronology stop_chronology
# 1 156 46 3 2300 2200
# 2 156 46 3 2200 2100
# 3 156 46 3 2100 2000
# 4 274 37 1 2200 2100
# 5 274 37 1 2100 2000
# AGGREGATE TWO COLS ALONG TWO FCTS
agg_df <- do.call(data.frame,
aggregate(cbind(start_chronology, stop_chronology) ~ feature_id + object_type_id + amount, df,
function(x) c(min=min(x), max=max(x)))
)
# REMOVE COLS AND RENAME COLS
agg_df <- setNames(transform(agg_df, start_chronology.min = NULL, stop_chronology.max=NULL), names(df))
agg_df
# feature_id object_type_id amount start_chronology stop_chronology
# 1 274 37 1 2200 2000
# 2 156 46 3 2300 2000