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是大行的情况下,有没有更有效的方法来实现这一点?