我有一个看起来像这样的文件:
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的所有实例。我想要做的是针对每个A
和B
进行过滤,以便为A
获取三个数据点,为B
获取两个数据点。显然,我的主要数据集远远大于数据集,而且数字不同,但两者都不重要。
我怎样才能做到这一点?
答案 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()
会为TRUE
和NA
的每个元素返回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)