如何仅在一列中删除NA数据?

时间:2014-01-07 17:24:45

标签: r

我有一个看起来像这样的文件:

date       A  B
2014-01-01 2  3
2014-01-02 5  NA
2014-01-03 NA NA
2014-01-04 7  11

如果我使用newdata <- na.omit(data)其中data是通过R加载的上表,那么我只获得两个数据点。我明白了,因为它会过滤NA的所有实例。我想要做的是针对每个AB进行过滤,以便为A获取三个数据点,为B获取两个数据点。显然,我的主要数据集远远大于数据集,而且数字不同,但两者都不重要。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:7)

对要查找的相关数据向量使用is.na(),并使用否定结果进行索引。例如:

R> data[!is.na(data$A), ]
        date A  B
1 2014-01-01 2  3
2 2014-01-02 5 NA
4 2014-01-04 7 11
R> data[!is.na(data$B), ]
        date A  B
1 2014-01-01 2  3
4 2014-01-04 7 11

is.na()会为TRUENA的每个元素返回FALSE。要索引数据框的行,我们可以使用这个逻辑向量,但我们想要它的相反。因此,我们使用!来暗示相反的情况(TRUE变为FALSE,反之亦然。

您可以通过在,中的[ , ]之后为列添加索引来限制您返回的列,例如

R> data[!is.na(data$A), 1:2]
        date A
1 2014-01-01 2
2 2014-01-02 5
4 2014-01-04 7

答案 1 :(得分:1)

数据框中的每一列必须具有相同数量的元素,这就是NA首先派上用场的原因......

你能做的是

df.a <- df[!is.na(df$A), -3]
df.b <- df[!is.na(df$B), -2]

答案 2 :(得分:1)

如果是Python,我们可以使用子集定义列/列,并在true处进行DF更改: rounds2.dropna(subset = ['company_permalink'],inplace = True)