如何在 data.table 对象的每一列中找到最后一个非缺失值?
为了找到 data.table 对象每一列中的最后一个非缺失值,我们可以结合使用 lapply 函数和 tail 函数来处理 NA 值。
例如,如果我们有一个名为 DT 的 data.table 对象,那么我们可以使用以下命令找到 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
广告