当前位置:  开发笔记 > 编程语言 > 正文

过滤R中的数据

如何解决《过滤R中的数据》经验,为你挑选了2个好方法。

我有一个CSV数据文件,我可以使用R加载 read.csv()

有些数据丢失了,所以我想将数据帧缩小到完全由非缺失数据组成的设置,即如果NULL出现在任何地方,我想从过滤后的数据集中排除该列和行.

我知道我可以通过内置的R向量操作相当简单地做到这一点,但我不太确定如何做到这一点?

为了使我的问题更具体一点,这里有一个快速的数据样本,以便您可以看到我想要做的事情.

DocID       Anno1    Anno7  Anno8
1           7        NULL   8
2           8        NULL   3
44          10       2      3
45          6        6      6
46          1        3      4
49          3        8      5
62          4        NULL   9
63          2        NULL   4
67          11       NULL   3
91          NULL     9      7
92          NULL     7      5
93          NULL     8      8

所以考虑到这个输入,我需要一些代码来减少输出.

DocID       Anno8
44          3
45          6
46          4
49          5

作为Anno8唯一具有非NULL数据的列,并且只有四行具有非NULL数据.



1> 小智..:

您可以使用na.omit()删除包含缺失的任何行,但这不是您想要的.而且,目前接受的答案是错误的.它为您提供了完整的列,但不会删除具有一个或多个缺失值的行,这就是所要求的.正确答案可以获得:

> a <- data.frame(a=c(1,2),b=c(NA,1), c=c(3,4))
> a
  a  b c
1 1 NA 3
2 2  1 4
> na.omit(a)[,colSums(is.na(a))==0]
  a c
2 2 4

要看到上面的答案是错误的:

> a[ ,apply(a, 2, function(z) !any(is.na(z)))]
  a c
1 1 3
2 2 4

由于第2列中的NA,应删除第1行.



2> rguha..:

如果x是你的data.frame(或matrix)那么

x[ ,apply(x, 2, function(z) !any(is.na(z)))]

由于您的示例使用NULL,is.na(·)将被替换为is.null(·)

或者你可以看看subset(·).

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有