Eu tenho um vetor de nomes:
names <- c("a", "b", "c", "d", "e", "f", "g", "h")
Quero fazer séries de combinações desses nomes com esses números respectivamente:
numbers <- c(0, 0:2, 0:3, 0:1, 0:1, 0, 0, 0)
Então minhas combinações seriam:
a0 b0 b1 b2 c0 c1 c2 c3 d0 d1 e0 e1 f0 g0 h0
Como eu posso fazer isso? Prefiro usar uma função vetorizada do que iterar.
Tentei esses códigos, mas obtive resultados errados (possivelmente devido a reciclagem ou algo assim):
paste0(names, numbers, recycle0 = F)
paste0(names, numbers, recycle0 = T)
paste0(names, numbers |> as.list())
purrr::map_chr(names, paste0(c(0, 0:2, 0:3, 0:1, 0:1, 0, 0, 0)))
e alguns outros que não consigo lembrar com clareza.
1) São
cumsum(...)
os índices em nomes, ou seja, 1 2 2 2 3 3 3 3 4 4 5 5 6 7 8, então indexe emnames
e colenumbers
no final. Nenhum pacote externo é usado.2) Uma segunda abordagem, também baseada em
cumsum(...)
, é usarrle
para obter a duração das corridas, repetir cada nome esse número de vezes e depois colar os números. Isso também não usa pacotes.3) Este não usa
cumsum
, mas usa um pacote. Substituanumbers
os 0 pelos nomes e os demais números por NA. Em seguida, usena.locf0
para preencher os NA e colar os números.Observação
Entrada da pergunta
Aqui está uma solução usando
numbers
como vetor com a sequência máximaVocê pode usar
mapply
:Saída: