Скажем, у меня есть этот набор данных:
df <- data.frame(time = c(100, 101, 101, 101, 102, 102, 103, 105, 109, 109, 109),
val = c(1,3,1,2,3,1,2,3,1,2,1))
df
time val
1 100 1
2 101 3
3 101 1
4 101 2
5 102 3
6 102 1
7 103 2
8 105 3
9 109 1
10 109 2
11 109 1
Мы можем определить повторяющиеся времена в столбце «время», как это:
df[duplicated(df$time),]
Что я хочу сделать, это настроитьзначение времени (добавьте 0,1), если оно дублируется.Я мог бы сделать это следующим образом:
df$time <- ifelse(duplicated(df$time),df$time+.1,df$time)
time val
1 100.0 1
2 101.0 3
3 101.1 1
4 101.1 2
5 102.0 3
6 102.1 1
7 103.0 2
8 105.0 3
9 109.0 1
10 109.1 2
11 109.1 1
Проблема здесь в том, что у нас все еще есть повторяющиеся значения egrow 3 и 4 (то, что они отличаются в столбце 'val', не имеет значения).Строки 10 и 11 имеют ту же проблему.Строки 5 и 6 в порядке.
Есть ли способ сделать это итеративно - т.е. добавить 0,1 к первому дубликату, 0,2 ко второму дубликату (с тем же значением времени) и т. Д. Таким образом, строка 4 станет 101,2, истрока 11 станет 109,2.Число дубликатов на значение неизвестно, но никогда не будет равно 10 (обычно максимум 4).