如何在 R 中 data.table 对象的每一行中创建第一个非零值的列?

要data.table在 R 中对象的每一行中创建第一个非零值的列,我们可以按照以下步骤操作 -

  • 首先,创建一个data.table具有一些零值的对象。

  • 然后,使用 apply 函数和自定义函数在data.table对象的每一行中找到第一个非零值。

示例

创建data.table对象

让我们创建一个data.table对象,如下所示 -

library(data.table)
v1<-sample(0:5,25,replace=TRUE)
v2<-sample(0:5,25,replace=TRUE)
v3<-sample(0:5,25,replace=TRUE)
DT<-data.table(v1,v2,v3)
DT
输出结果

执行时,上述脚本生成以下内容output(this output will vary on your system due to randomization)-

   v1 v2 v3
1:  0  2 4
2:  0  4 1
3:  4  1 2
4:  2  5 0
5:  5  3 4
6:  1  1 5
7:  5  3 0
8:  5  0 1
9:  5  3 4
10: 0  3 2
11: 5  3 2
12: 5  4 4
13: 4  1 2
14: 5  1 2
15: 5  1 5
16: 4  3 1
17: 2  1 5
18: 2  4 2
19: 4  0 0
20: 3  1 2
21: 0  4 5
22: 5  0 0
23: 5  2 5
24: 5  1 1
25: 1  5 5
   v1 v2 v3

在data.table对象的每一行中找到第一个非零

使用 apply 函数和自定义函数在data.table对象 DT 的每一行中查找第一个非零值,如下所示 -

library(data.table)
v1<-sample(0:5,25,replace=TRUE)
v2<-sample(0:5,25,replace=TRUE)
v3<-sample(0:5,25,replace=TRUE)
DT<-data.table(v1,v2,v3)
DT$First_Non_zero<-apply(DT,1, function(x) x[x !=0][1])
DT
输出结果
   v1 v2 v3 First_Non_zero
1:  0 2  4  2
2:  0 4  1  4
3:  4 1  2  4
4:  2 5  0  2
5:  5 3  4  5
6:  1 1  5  1
7:  5 3  0  5
8:  5 0  1  5
9:  5 3  4  5
10: 0 3  2  3
11: 5 3  2  5
12: 5 4  4  5
13: 4 1  2  4
14: 5 1  2  5
15: 5 1  5  5
16: 4 3  1  4
17: 2 1  5  2
18: 2 4  2  2
19: 4 0  0  4
20: 3 1  2  3
21: 0 4  5  4
22: 5 0  0  5
23: 5 2  5  5
24: 5 1   1 5
25: 1 5  5  1
  v1 v2 v3 First_Non_zero

猜你喜欢