【发布时间】:2019-04-22 02:13:18
【问题描述】:
对于以下类型的问题,堆栈上有一些答案,但它们都效率低下并且不能很好地扩展。
要重现它,假设我有如下数据:
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
prod1vint1 prod1vint2 prod1vint3 prod1vint4
1: 0 0 0 0
2: 1 1 0 4
3: 1 0 0 4
4: 0 1 0 4
5: 0 1 1 4
6: 0 1 0 5
我想识别第一个非零元素的列,所以输出如下所示:
> 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
【问题讨论】:
标签: r dplyr data.table