2014-01-07 44 views
2

我有一個看起來像這樣一個文件:如何只刪除一列中的NA數據?

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。很明顯,我的主要數據集比這個數字要大得多,數字也不一樣,但都不重要。

我該如何做到這一點?

回答

4

你希望尋找和索引使用否定結果數據的相關矢量使用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對於每個被NAFALSE otherwise元素。要索引數據框的行,我們可以使用這個邏輯向量,但我們希望它的反向。因此,我們使用!暗示相反(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

在數據幀中的每一列必須有相同數量的元素,這就是爲什麼NA進來擺在首位得心應手š...

你可以做的是

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