Semelhante a esta pergunta , quero selecionar a última linha de cada grupo e atribuir um valor a ela.
a <- data.frame("ID" = c("A", "A", "B", "B", "C", "C"),
"NUM" = c(1, 2, 4, 3, 6, 9),
"VAL" = c(1, 0, 1, 0, 1, 0))
ID NUM VAL
A 1 1
A 2 0
B 4 1
B 3 0
C 6 1
C 9 0
Minha saída desejada:
ID NUM VAL end.spell
A 1 1 0
A 2 0 1
B 4 1 0
B 3 0 1
C 6 1 0
C 9 0 1
Como eu faço isso? Qualquer ajuda é apreciada.
Usando
group_by()
fromdplyr
, você pode identificar casos em que o número da linha é igual ao número de linhas desse grupo e atribuir 1 para essa observação e zero caso contrário.Criado em 22/01/2024 com reprex v2.0.2
Determine o grupo
length
e armazene emlen
, crieinteger
um vetor de nulos de comprimentolen
ereplace
número do elemento correspondente alen
with1L
. Feito emave
ID s por ID s*.Dados:
Aqui está outra opção usando
last()
:Uma implementação base R:
E uma implementação data.table: