如何在 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