我有以下格式数据中寻找与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"
谢谢!
我有以下格式数据中寻找与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"
谢谢!
尝试
unique(df$ID[is.na(df$Side_of_boat)])
代替。 NA
是R中的一个特殊值,它也有其自己的特殊功能is.na()
来测试条目是否为NA
。检查?NA
获取更多信息。
#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
尝试:
df$ID[which(is.na(df$Side_of_Boat))]
它应该给你的ID的载体,无论他们是数字或字符
+1,因为方法1和方法3也适用于'ID'不唯一的情况(在给定的例子中,这不是唯一的情况,但通常可以)。 – pfifas
关于#1:如果ID是以2开头还是1以外的任何数字,或者通常如果它不是序列1:n,那该怎么办?和方法2:子集是正确的,但它不会产生所需的输出,因为OP问a)只有ID和b)他们只需要唯一的值。 –
我不认为这会导致#1的问题。我一直使用它,我的ID通常以字母开头,然后有随机数字。这只是测试一个单元格是否NA。方法2只是给出一种额外的方式来获得NA行,这对希望未来的读者有用,但是,它确实提供了完整的记录。 –