У меня есть набор данных, который выглядит так, как показано ниже:
| Id | Name | Date_diff |
|----|:-----:|----------:|
| 50 | David | 0 |
| 50 | David | -16 |
| 50 | David | -4 |
| 50 | David | -1 |
| 50 | David | 0 |
| 50 | David | -2 |
| 84 | Ron | -11 |
| 84 | Ron | -12 |
| 84 | Ron | -168 |
| 84 | Ron | -8 |
| 84 | Ron | 16 |
| 84 | Ron | NA |
Воспроизводимый код:
df= data.frame(Id= c('50','84'), Name= c('David','Ron'))
df=df[rep(seq_len(nrow(df)),each=6),]
Date_diff= c(0,-16,-4,-1,0,-2,-11,-12,-168,-8,16,'NA')
df=data.frame(df,Date_diff)
Теперь для каждого идентификатора мне нужно создать разные столбцы неравных сегменты, в которых будет указано количество значений в столбце «Date-diff». Диапазоны интервалов должны быть «NA», «> 0», «0», «- 1», «от 2 до -3», «от 4 до 6», «от 7 до 12» и «> -12' . Также будет дополнительный столбец «итого», в котором будут храниться суммированные значения, присутствующие в сегментах.
Например, когда мы рассматриваем Id = 50, мы видим, что есть 2 счетчика для значения «0», которые попадают в сегмент «0», 1 счетчик для значения «-16», которое будет попадать в область «> 0», 1 считать значение -4, которое попадет в диапазон от -4 до -6, и так далее. Окончательная таблица должна быть такой, как показано ниже:
| Id | Name | NA | >0 | 0 | -1 | -2 to -3 | -4 to -6 | -7 to -12 | >-12 | Total |
|----|:-----:|---:|----|---|----|----------|----------|-----------|------|-------|
| 50 | David | 0 | 0 | 2 | 1 | 1 | 1 | 0 | 1 | 6 |
| 84 | Ron | 1 | 1 | 0 | 0 | 0 | 0 | 3 | 1 | 6 |
Сначала я попытался создать новый столбец, чтобы классифицировать в нем значения в Date_diff, но значения, представленные в перерывах, вероятно, неверны. Вот что я попробовал:
df <- transform(df, group=cut(Date_diff, breaks=c(-Inf,-13,-7,-4,-2,-1,Inf),
labels=c('<-12', '-7 to -12','-4 to -6','-2 to -3', '-1','>0')))
Может кто-нибудь, пожалуйста, дайте мне знать, как добиться желаемого результата?