R-查找data.table中第一个非零元素的索引

R-查找data.table中第一个非零元素的索引,r,data.table,R,Data.table,我得到了以下形式的面板数据: DT = data.table(Id=1:5, Time1=c(0,0,1,2,0), Time2=c(1,0,0,0,0), Time3=c(0,1,2,0,0), Time4=c(0,1,2,5,4)) Id Time1 Time2 Time3 Time4 1 0 1 0 0 2 0 0 1 1 3 1 0 2 2 4 2 0 0 5 5 0

我得到了以下形式的面板数据:

DT = data.table(Id=1:5, Time1=c(0,0,1,2,0), Time2=c(1,0,0,0,0), Time3=c(0,1,2,0,0), Time4=c(0,1,2,5,4))

Id  Time1 Time2 Time3 Time4
1   0     1     0     0
2   0     0     1     1
3   1     0     2     2
4   2     0     0     5
5   0     0     0     4
我想第一次提取每个不是0的ID。 数据集很大,因此我正在寻找使用data.table的解决方案

我尝试了一些使用which.min(which!=0)的方法,但是可以解决这个问题

输出应如下所示:

Id  Time1 Time2 Time3 Time4 Output
1   0     1     0     0     2
2   0     0     1     1     3
3   1     0     2     2     1
4   2     0     0     5     1
5   0     0     0     4     4
谢谢你的帮助。

你可以做的

DT[, Output := which.max(.SD != 0), by = Id][]
#    Id Time1 Time2 Time3 Time4 Output
# 1:  1     0     1     0     0      2
# 2:  2     0     0     1     1      3
# 3:  3     1     0     2     2      1
# 4:  4     2     0     0     5      1
# 5:  5     0     0     0     4      4
which.max
查找最大值第一次出现的索引。所以当我们做
.SD!=0
它查找第一个出现的
TRUE

同样,我们也可以使用

DT[, Output := match(TRUE, .SD != 0), by = Id]
# or 
DT[, Output := which(.SD != 0)[1], by = Id]

在DT是大行的情况下,有没有更有效的方法来实现这一点?