R中

2014-07-25 72 views
1

我有以下格式數據中尋找與NA一排獨特identifyer在特定列:R中

ID Species Side_of_boat 
1 spA  Port 
2 spB  Starboard 
3 spA  NA 

我想編寫一行代碼,給我的唯一ID的所有在「船的一側」有NA的行。

我曾嘗試:

unique(df$ID[df$side_of_boat == "NA"]) 

但它不給我我想要的輸出。我想輸出爲:

"3" 

謝謝!

回答

1

嘗試

unique(df$ID[is.na(df$Side_of_boat)]) 

代替。 NA是R中的一個特殊值,它也有其自己的特殊功能is.na()來測試條目是否爲NA。檢查?NA獲取更多信息。

1

#Method1

n <- which(is.na(df$side_of_boat))

你也可以使用*apply這一點,例如

lapply(apply(df$side_of_boat, 1, function(x) which(!is.na(x))) , paste, collapse=", ")

#Method 2

new_DF <- subset(df, is.na(df$side_of_boat))

#Method 3

你也可以編寫一個函數來爲你做這個:

getNa <- function(dfrm) lapply(dfrm, function(x) which(is.na(x)))

#Note 如果您有NA字符值,第一次運行

df$side_of_boat[df$side_of_boat=='NA'] <- NA

+0

+1,因爲方法1和方法3也適用於'ID'不唯一的情況(在給定的例子中,這不是唯一的情況,但通常可以)。 – pfifas

+0

關於#1:如果ID是以2開頭還是1以外的任何數字,或者通常如果它不是序列1:n,那該怎麼辦?和方法2:子集是正確的,但它不會產生所需的輸出,因爲OP問a)只有ID和b)他們只需要唯一的值。 –

+0

我不認爲這會導致#1的問題。我一直使用它,我的ID通常以字母開頭,然後有隨機數字。這只是測試一個單元格是否NA。方法2只是給出一種額外的方式來獲得NA行,這對希望未來的讀者有用,但是,它確實提供了完整的記錄。 –

0

嘗試:

df$ID[which(is.na(df$Side_of_Boat))] 

它應該給你的ID的載體,無論他們是數字或字符