如何在 R 中删除包含 NA 的 data.table 对象中的行?


如果一行包含缺失值,它们的和将不是有限的,因此,我们可以将 is.finite 函数与 data.table 对象一起使用,以删除包含 NA 的行。例如,如果我们有一个名为 DT 的 data.table 对象,其中包含一些带有 NA 的行,那么我们可以使用 DT[is.finite(rowSums(DT))] 删除这些行。

示例 1

加载 data.table 包并创建一个 data.table 对象 −

> library(data.table)
> x1<-sample(c(1,NA),20,replace=TRUE)
> x2<-rpois(20,5)
> DT1<-data.table(x1,x2)
> DT1

输出

   x1  x2
1:  1   2
2:  NA  4
3:  1   2
4:  NA  5
5:  1   6
6:  1   8
7:  NA  3
8:  1   5
9:  1   6
10: 1   6
11: NA  5
12: 1   4
13: NA  8
14: NA  5
15: 1   4
16: NA  5
17: NA  4
18: 1   5
19: 1   8
20: 1   5

从 DT1 中删除包含 NA 的行 −

> DT1[is.finite(rowSums(DT1))]

输出

   x1 x2
1:  1  2
2:  1  2
3:  1  6
4:  1  8
5:  1  5
6:  1  6
7:  1  6
8:  1  4
9:  1  4
10: 1  5
11: 1  8
12: 1  5

示例 2

> y1<-sample(c(5,NA),20,replace=TRUE)
> y2<-rnorm(20)
> DT2<-data.table(y1,y2)
> DT2

输出

   y1      y2
1: NA  -0.1011854033
2: NA   0.0852494741
3: 5   -3.0690178687
4: NA  -0.2443067757
5: NA  -1.7802490517
6: 5   -0.8969211846
7: 5   -0.0414789991
8: 5    1.7043093000
9: 5   -0.2734151106
10: 5   0.5297258605
11: 5  -0.3614407993
12: 5   0.4282377599
13: 5  -0.9532251956
14: 5  -2.6958281110
15: 5  -0.5990272270
16: 5   0.3634742009
17: NA  0.2436549088
18: NA -0.0004956819
19: 5   0.8576350551
20: 5  -0.5816740589

从 DT2 中删除包含 NA 的行 −

> DT2[is.finite(rowSums(DT2))]

输出

   y1   y2
1: 5  -3.0690179
2: 5  -0.8969212
3: 5  -0.0414790
4: 5   1.7043093
5: 5  -0.2734151
6: 5   0.5297259
7: 5  -0.3614408
8: 5   0.4282378
9: 5  -0.9532252
10: 5 -2.6958281
11: 5 -0.5990272
12: 5  0.3634742
13: 5  0.8576351
14: 5 -0.5816741

更新于:04-Mar-2021

2 千次查看

开启你的 职业生涯

完成课程并获得认证

开始
广告
© . All rights reserved.