Я тренируюсь в циклах и функциях в R (но сейчас я нахожусь на базовом уровне). Для недавнего исследования мне нужно подготовить свои данные следующим образом:
У меня есть набор данных, который выглядит следующим образом:
dd <- read.table(text="
event.timeline.ys ID year group
1 2 800033 2008 A
2 1 800033 2009 A
3 0 800033 2010 A
4 -1 800033 2011 A
5 -2 800033 2012 A
15 0 800076 2008 B
16 -1 800076 2009 B
17 5 800100 2014 C
18 4 800100 2015 C
19 2 800100 2017 C
20 1 800100 2018 C
30 0 800125 2008 A
31 -1 800125 2009 A
32 -2 800125 2010 A", header=TRUE)
Я хотел бы сохранить для каждого человека только строку последняя с event.timeline.ys> = 0 (это будет строка 3 для идентификатора 800033) и строка первая с event.timeline.ys <0 (это будет строка 4 для идентификатора 800033). Все остальные строки будут удалены. Поэтому мой окончательный фрейм данных должен содержать только две строки для каждого идентификатора. </p>
Человек с ID = 800100 не имеет отрицательных значений на event.timeline.ys. В этом случае я хотел бы сохранить только последнюю строку с event.timeline.ys> = 0.
Окончательный набор данных будет выглядеть следующим образом:
event.timeline.ys ID year group
3 0 800033 2010 A
4 -1 800033 2011 A
15 0 800076 2008 B
16 -1 800076 2009 B
20 1 800100 2018 C
30 0 800125 2008 A
31 -1 800125 2009 A
Я думал об использовании цикла for для проверки внутри каждого идентификатора, что такое строка last с event.timeline.ys> = 0 и строка first с event.timeline. да <0 есть. Однако практическая реализация в R не удается. </p>
У кого-нибудь есть умный совет? Я также очень открыт для других решений, которые не основаны на циклах for или подобных вещах.