gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:16:29 24 4
gpt4 key购买 nike

我有以下形式的面板数据:

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]

关于R - 查找 data.table 中第一个非零元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27092468/

24 4 0