У меня есть набор данных dt
в формате data.table, который выглядит как
type id val
1 m 1 5
2 m 1 3
3 m 1 NA
3 e 2 7
4 e 3 7
5 m 4 4
6 m 4 2
7 m 4 NA
Я хочу заменить val
последней записи (в моем примере NA
) каждой группы на id
типа m
с суммой val
других записей группы. То есть я хочу получить такой набор данных:
type id val
1 m 1 5
2 m 1 3
3 m 1 8
3 e 2 7
4 e 3 7
5 m 4 4
6 m 4 2
7 m 4 6
В настоящее время я пытаюсь обернуть голову вокруг функций data.table, в частности .SD, и хочу решить проблему с помощью этих инструментов.
До сих пор я выяснил, что dt[type=="m",.SD[.N],.SDcols="val",by=id]
дает мне доступ к соответствующим элементам, а dt[type=="m", lapply(.SD[1:.N-1]),.SDcols="val",by=id]
дает мне правильную сумму. Однако я не могу соединить их вместе.
Любая помощь приветствуется.