2014-11-23 85 views
2

我有以下形式潘內爾數據:的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  0  0  4 

我要爲Extrac第一時間爲每個ID是不爲0 數據集很大,因此我正在尋找一個data.table解決方案。

我嘗試了一些使用which.min(其中!= 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 

感謝您的幫助。

回答

2

你可以做

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] 
相關問題