2015-04-22 107 views
0

我有一個數據框叫做數據。我有一個名爲ColB的列,其中包含所有NA值和一個名爲ColC的列,其中包含所有整數值並且沒有NAs。R數據框子集概念

當我使用的子集語法我得到一些錯誤的結果(所有NAS):

nrow(data[data$ColB == "XXXX",]) 

但是當我運行使用這些功能我沒有得到任何結果,因爲我希望,並希望相同的語法。

data[which(data$ColB== "XXXX"),] 

此外,當我運行以下命令:

{data[data$ColC == 185,]} 

我得到正確的結果/輸出這是一個匹配行。

這是爲什麼?這是關於在數據中具有NA的東西嗎?並且按列引用進行子集(而不是使用子集函數),而不使用不推薦的子集?

回答

1

NA長度爲1的邏輯常數,其包含缺失值指示符。

並且例如which(c(NA,NA,NA))返回一個零長度的整數向量,因爲沒有一個比較可以被認爲是TRUE,就像您嘗試which(c(FALSE,FALSE,FALSE))一樣。因此,你正試圖將你的data.frame放在一起,沒有任何返回。

如果您需要使用具有NA值的數據進行比較,請使用is.na()函數(例如,考慮:

x <- c(NA , is.na(NA) , NA) 
which(x) 
#[1] 2