Несколько способов сделать это:
Вы можете разделить amount_ID
на max
значение amount_ID
для уникального вхождения ID
.
library(data.table)
setDT(df)[, timespan := amount_ID/max(amount_ID) * 100, rleid(ID)]
df
# ID amount_ID timespan
# 1: 3 1 20.0
# 2: 3 2 40.0
# 3: 3 3 60.0
# 4: 3 4 80.0
# 5: 3 5 100.0
# 6: 9 1 25.0
# 7: 9 2 50.0
# 8: 9 3 75.0
# 9: 9 4 100.0
#10: 3 1 33.3
#11: 3 2 66.7
#12: 3 3 100.0
Разделите на количество строк в каждой группе.
setDT(df)[, timespan := amount_ID/.N * 100, rleid(ID)]
Разделите на последнее значение amount_ID
setDT(df)[, timespan := amount_ID/last(amount_ID) * 100, rleid(ID)]
Мы можем использовать то же самое в dplyr
.
library(dplyr)
Разделить на максимум
df %>%
group_by(gr = rleid(ID)) %>%
mutate(timespan = amount_ID/max(amount_ID) * 100)
Разделить на количество строк
df %>%
group_by(gr = rleid(ID)) %>%
mutate(timespan = amount_ID/n() * 100)
Разделить на последнее значение
df %>%
group_by(gr = rleid(ID)) %>%
mutate(timespan = amount_ID/last(amount_ID) * 100)