Предположим, у меня есть следующие данные:
tempmat=matrix(c(1,1,0,4,1,0,0,4,0,1,0,4, 0,1,1,4, 0,1,0,5),5,4,byrow=T)
tempmat=rbind(rep(0,4),tempmat)
tempmat=data.table(tempmat)
names(tempmat)=paste0('prod1vint',1:4)
tempmat[,firstnonzero:=c(NA,1,1,2,2,2)]
Итак, таблица данных выглядит так:
> tempmat
prod1vint1 prod1vint2 prod1vint3 prod1vint4 firstnonzero
1: 0 0 0 0 NA
2: 1 1 0 4 1
3: 1 0 0 4 1
4: 0 1 0 4 2
5: 0 1 1 4 2
6: 0 1 0 5 2
Я хочу найти число ненулевых элементов справа от столбца, обозначенного "firstnonzero".
Желаемый результат будет:
> tempmat
prod1vint1 prod1vint2 prod1vint3 prod1vint4 firstnonzero numbernonzero
1: 0 0 0 0 NA NA
2: 1 1 0 4 1 2
3: 1 0 0 4 1 1
4: 0 1 0 4 2 1
5: 0 1 1 4 2 2
6: 0 1 0 5 2 1
Это связано с тем, что, например, в строке 2 в prod1vint2 и prod1vint4 есть ненулевой элемент, поэтому число ненулевых элементов справа от первого ненулевого элемента равно 2 и т. Д.
Я пытаюсь найти решение, которое является эффективным и хорошо масштабируется, поэтому оно не может быть решением в стиле применения или циклического преобразования, которое я мог бы реализовать самостоятельно.