如何在 data.table 对象的每一列中找到最后一个非缺失值?

要在data.table对象的每一列中找到最后一个非缺失值,我们可以使用 lapply 函数和 tail 函数来获取 NA 值。

例如,如果我们有一个data.table名为 DT的对象,那么我们可以使用以下给定的命令在 DT 的每一列中找到最后一个非缺失值 -

DT[,lapply(.SD,function(x) tail(x[!is.na(x)],1))]

示例 1

以下代码段创建了一个data.table对象 -

library(data.table)

x1<-sample(c(NA,1,2),20,replace=TRUE)

x2<-sample(c(NA,5,10),20,replace=TRUE)

x3<-sample(c(NA,100,200),20,replace=TRUE)

DT1<-data.table(x1,x2,x3)

DT1

data.table创建以下对象 -

     x1 x2 x3

1:   2  5 200

2:  NA  5 200

3:   1  5 100

4:  NA NA 100

5:   1 10 200

6:  NA 10 100

7:  NA NA 200

8:   2 10 100

9:   1 10 100

10:  1  5 200

11:  1  5  NA

12: NA  5  NA

13:  2  5 100

14: NA  5 100

15: NA 10 100

16:  2  5 200

17: NA  5  NA

18: NA NA  NA

19:  2 10 200

20:  1 NA 100

要在 DT1 的每一列中找到最后一个非缺失值,请将以下代码添加到上述代码段中 -

DT1[,lapply(.SD,function(x) tail(x[!is.na(x)],1))]
输出结果

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

   x1 x2 x3

1: 1 10 100

示例 2

以下代码段创建了一个data.table对象 -

y1<-sample(c(NA,rnorm(2)),20,replace=TRUE)

y2<-sample(c(NA,rnorm(2)),20,replace=TRUE)

y3<-sample(c(NA,rnorm(2)),20,replace=TRUE)

DT2<-data.table(y1,y2,y3)

DT2

data.table创建以下对象 -

       y1         y2          y3

1:  -0.7819176  0.5451545 -1.7242281

2:  -0.4305358  NA         NA

3:  -0.7819176  0.5451545  NA

4:  -0.4305358  NA         0.3926004

5:   NA         0.2671401 -1.7242281

6:  -0.7819176  0.2671401  0.3926004

7:  -0.7819176  NA         NA

8:  -0.4305358  0.5451545 -1.7242281

9:  -0.4305358  NA        -1.7242281

10: -0.7819176  0.5451545  NA

11: -0.4305358  NA         NA

12:  NA         0.5451545  0.3926004

13: -0.4305358  NA         0.3926004

14: -0.4305358  0.5451545 -1.7242281

15:  NA         0.2671401  0.3926004

16:  NA         0.5451545 -1.7242281

17:  NA         NA         NA

18: -0.4305358  NA         NA

19: -0.7819176  0.2671401  NA

20: -0.7819176  NA        -1.7242281

要在 DT2 的每一列中找到最后一个非缺失值,请将以下代码添加到上述代码段中 -

DT2[,lapply(.SD,function(x) tail(x[!is.na(x)],1))]
输出结果

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

y1 y2 y3

1: -0.7819176 0.2671401 -1.724228

示例 3

以下代码段创建了一个data.table对象 -

z1<-sample(c(NA,round(runif(2,2,10),2)),20,replace=TRUE)

z2<-sample(c(NA,round(runif(2,1,2),2)),20,replace=TRUE)

z3<-sample(c(NA,round(runif(2,10,115),2)),20,replace=TRUE)

DT3<-data.table(z1,z2,z3)

DT3

data.table创建以下对象 -

     z1    z2    z3

1:  8.94  NA    71.40

2:  NA    NA    NA

3:  8.94  NA    NA

4:  8.94  NA    71.40

5:  4.09  1.48  NA

6:  4.09  NA    NA

7:  NA    1.38  71.40

8:  8.94  NA    NA

9:  4.09  NA    NA

10: 8.94  NA    NA

11: 4.09  NA    71.40

12: 8.94  1.48  107.44

13: 8.94  1.38  NA

14: 4.09  1.38  NA

15: 8.94  1.38  107.44

16: NA    1.48  71.40

17: NA    NA    107.44

18: NA    1.38  71.40

19: 4.09  NA    NA

20: 4.09  1.48  71.40

要在 DT3 的每一列中找到最后一个非缺失值,请将以下代码添加到上述代码段中 -

DT3[,lapply(.SD,function(x) tail(x[!is.na(x)],1))]
输出结果

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

    z1    z2   z3

1: 4.09 1.48 71.4

以上是 如何在 data.table 对象的每一列中找到最后一个非缺失值? 的全部内容, 来源链接: utcz.com/z/322641.html

回到顶部