Tenho um data.table
df em R com quatro colunas: id, start, end, score. O início e o fim variam de 1 a 10 e o id pode ter duplicatas. Gostaria de transformar esse data.table em uma nova matriz B onde cada linha corresponde a um id, e possui 10 colunas correspondentes a cada posição de 1 a 10. Se uma posição estiver dentro do início e fim no df para um determinado id , a célula correspondente em B deverá ser a pontuação, caso contrário deverá ser 0.
por exemplo:
library(data.table)
df <- data.table(id = c(1, 1, 2), start = c(1, 5, 1), end = c(3, 7, 2), score = c(10, 20, 30))
df
id start end score
1 1 1 3 10
2 1 5 7 20
3 2 1 2 30
Resultado esperado:
id 1 2 3 4 5 6 7 8 9 10
1 10 10 10 0 20 20 20 0 0 0
2 30 30 0 0 0 0 0 0 0 0
Primeiro estendendo a pontuação existente dos dados por linha, depois adicionando as linhas ausentes e, finalmente
transpose
, .Uma maneira possível de resolver seu problema: