R中

2014-07-25 33 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的载体,无论他们是数字或字符