选择数据框中的不同行,R中只有NA值

时间:2018-02-19 15:50:56

标签: r

我有一个包含3个cols的数据框。

ID1 <- c(1,1,2,2,3,4)

ID2 <- c(11,NA,12,NA,NA,NA)

Val <- c("A","B","C","D","E","F")

DF <- data.frame(ID1,ID2,Val, stringsAsFactors=FALSE)

现在,我需要提取ID2为“NA”的唯一行。在这种情况下,所需的输出将是具有两行的数据帧,即ID1 = 3,4 。我尝试了下面的子命令,结果导致所有四行NA。寻找实现所需输出的方法。

DF2 <- subset(DF , is.na(ID2))

3 个答案:

答案 0 :(得分:1)

如果按唯一行表示ID1的唯一值,那么此代码就可以解决问题:

DF[which(!duplicated(DF$ID1) & is.na(DF$ID2)),]

  ID1 ID2 Val
5   3  NA   E
6   4  NA   F

如果您更喜欢使用subset,则此代码会提供相同的输出:

subset(DF , !duplicated(ID1) & is.na(ID2))

答案 1 :(得分:1)

尝试:

library(dplyr)
DF %>%
        group_by(ID1) %>%
        filter(n() == 1 & is.na(ID2))

答案 2 :(得分:0)

定义一个功能,以查找ID1中包含所有NA的ID2个组,然后return个唯一的行。

library(dplyr)

select_na <- function(df_sub) {
  if (any(!is.na(df_sub$ID2))) {
    return(df_sub[0,])
  }
  else {
    return(unique(df_sub))
  }
}

DF %>%
  group_by(ID1) %>%
  do(select_na(.))

准确地给出你想要的东西。