Я столкнулся с проблемой с моими данными, где я хочу взять первый зарегистрированный ob
счет score
для каждого человека id
и вычесть из этого последнего наблюдаемого score
.Выберите первые наблюдаемые данные и используйте мутацию
Проблема с просьбой о первом наблюдении минус последнее наблюдение заключается в том, что иногда отсутствуют первые данные наблюдений.
Можно ли спросить о первой наблюдаемой оценке для каждого человека, тем самым пропуская любые отсутствующие данные?
Я построил ниже df, чтобы проиллюстрировать мою проблему.
help <- data.frame(id = c(5,5,5,5,5,12,12,12,17,17,20,20,20),
ob = c(1,2,3,4,5,1,2,3,1,2,1,2,3),
score = c(NA, 2, 3, 4, 3, 7, 3, 4, 3, 4, NA, 1, 4))
id ob score
1 5 1 NA
2 5 2 2
3 5 3 3
4 5 4 4
5 5 5 3
6 12 1 7
7 12 2 3
8 12 3 4
9 17 1 3
10 17 2 4
11 20 1 NA
12 20 2 1
13 20 3 4
И что я надеюсь запустить код, который даст мне ...
id ob score es
1 5 1 NA -1
2 5 2 2 -1
3 5 3 3 -1
4 5 4 4 -1
5 5 5 3 -1
6 12 1 7 3
7 12 2 3 3
8 12 3 4 3
9 17 1 3 -1
10 17 2 4 -1
11 20 1 NA -3
12 20 2 1 -3
13 20 3 4 -3
Я пытаюсь работать из dplyr, и я понимаю использование команды «group_by», однако, не уверены, как «выбрать» только первые наблюдаемые оценки, а затем мутировать, чтобы создать es
.
Когда я запускаю этот код на моих фактических данных, я получаю сообщение об ошибке -> «Ошибка: Дон» t знать, как генерировать значение по умолчанию для объекта класса numeric ". Переменные являются числовыми, и существует достаточное количество НС, например. у некоторых id нет ничего, кроме NA, а у других нет. Есть предположения? – bpace
Если у вас нет ничего, кроме значений NA, что вы хотите вернуть? Было бы неплохо, если бы ваши образцы данных включали этот сценарий вместе с желаемым результатом. – MrFlick
Согласовано. Таким образом, проблема заключается в наличии трех разных переменных для оценки, и каждый идентификатор имеет оценку для одной из трех переменных. Я предположил, что могу просто запустить код для каждого из них, но если у id в group_by нет данных для оценки, тогда появляется сообщение об ошибке ... вероятно, потому что na.omit вынимает все данные и там нечего вычитать. – bpace