Для каждого идентификатора я хочу вернуть значение в столбце «расстояние», где значение впервые становится отрицательным.Если значение вообще не становится отрицательным, вернуть значение 99 (или другое случайное число) для этого идентификатора.Пример кадра данных приведен ниже.
df <- data.frame(ID=c(rep(1, 4),rep(2,4),rep(3,4),rep(4,4),rep(5,4)),distance=rep(1:4,5), value=c(1,4,3,-1,2,1,-4,1,3,2,-1,1,-4,3,2,1,2,3,4,5))
> df
ID distance value
1 1 1 1
2 1 2 4
3 1 3 3
4 1 4 -1
5 2 1 2
6 2 2 1
7 2 3 -4
8 2 4 1
9 3 1 3
10 3 2 2
11 3 3 -1
12 3 4 1
13 4 1 -4
14 4 2 3
15 4 3 2
16 4 4 1
17 5 1 2
18 5 2 3
19 5 3 4
20 5 4 5
Требуемый вывод выглядит следующим образом
> df2
ID first_negative_distance
1 1 4
2 2 3
3 3 3
4 4 1
5 5 99
Я пытался, но не мог понять, как сделать это через dplyr.Любая помощь приветствуется.Фактические данные, над которыми я работаю, имеют тысячи идентификаторов с 30 различными уровнями расстояния для каждого.Имейте в виду, что для любого идентификатора может быть несколько экземпляров отрицательных значений.Мне просто нужен первый.
Редактировать: Попробовал решение, предложенное AntonoisK.
> df%>%group_by(ID)%>%summarise(first_neg_dist=first(distance[value<0]))
first_neg_dist
1 4
Это результат, который я получаю.Не соответствует тому, что получил Антонуа.Не уверен почему.