如何在R语言中根据列中的空值删除数据框的行?


有时数据会错误地输入系统,这就是为什么在进行数据分析之前必须仔细进行数据清洗的原因。如果数据收集者或样本单元找不到合适的问题选项,则可能会输入空格作为答案。如果问卷设计不当或错误地填写空格,也会发生这种情况。此外,如果我们有分类变量,则控制类别可能会用空格填充,或者我们可能希望保留一个空格类别以供以后使用新的类别。无论原因是什么,分析师都会面临此类问题。这些空格实际上是通过在计算机上使用空格键插入的。因此,如果数据框的任何列包含空值,则可以使用单方括号的子集删除这些行。

示例1

考虑以下数据框

在线演示

> set.seed(24)
> x1<-sample(c(" ",1:5),20,replace=TRUE)
> x2<-rnorm(20,4,1.25)
> df1<-data.frame(x1,x2)
> df1

输出

  x1   x2
1 2 3.413674
2 1 3.581267
3 2 5.920315
4 4 4.762493
5 1 4.645420
6 5 3.907114
7 1 3.243554
8 1.862944
9 3 3.664134
10 3.189261
11 3.882362
12 4 3.893074
13 4 4.149414
14 3.854630
15 4 2.820216
16 4 3.957828
17 3 3.268216
18 4 4.766064
19 1 5.896403
20 4.821726

删除包含空值的行

示例

在线演示

> df1[!df1$x1==" ",]

输出

  x1   x2
1 2 3.413674
2 1 3.581267
3 2 5.920315
4 4 4.762493
5 1 4.645420
6 5 3.907114
7 1 3.243554
9 3 3.664134
12 4 3.893074
13 4 4.149414
15 4 2.820216
16 4 3.957828
17 3 3.268216
18 4 4.766064
19 1 5.896403

示例2

在线演示

> y1<-sample(c(" ",rpois(5,1)),20,replace=TRUE)
> y2<-rpois(20,5)
> df2<-data.frame(y1,y2)
> df2

输出

 y1 y2
1 1 2
2 0 4
3   3
4 10
5 0 6
6 0 5
7 0 7
8 0 3
9 1 1
10 1 6
11 2 7
12 2 5
13 0 5
14   3
15 0 5
16 0 3
17 1 4
18 0 4
19 2 2
20 14

删除包含空值的行

示例

> df2[!df2$y1==" ",]

输出

 y1 y2
1 1 2
2 0 4
5 0 6
6 0 5
7 0 7
8 0 3
9 1 1
10 1 6
11 2 7
12 2 5
13 0 5
15 0 5
16 0 3
17 1 4
18 0 4
19 2 2

更新于:2020年11月23日

4K+浏览量

启动您的职业生涯

完成课程后获得认证

开始学习
广告