在R中仅使用NA值的数据框中选择不同的行
我有一个3列的数据框在R中仅使用NA值的数据框中选择不同的行,r,R,我有一个3列的数据框 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) ID1如果所说的唯一行是指ID1的唯一值,那么这个代码就有了窍门: DF[which(!duplicated(DF$ID1) & is.na(DF$ID2)),]
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)
ID1如果所说的唯一行是指ID1
的唯一值,那么这个代码就有了窍门:
DF[which(!duplicated(DF$ID1) & is.na(DF$ID2)),]
ID1 ID2 Val
5 3 NA E
6 4 NA F
如果您喜欢使用子集
,则此代码将提供相同的输出:
subset(DF , !duplicated(ID1) & is.na(ID2))
如果所说的唯一行是指ID1
的唯一值,则此代码将实现以下技巧:
DF[which(!duplicated(DF$ID1) & is.na(DF$ID2)),]
ID1 ID2 Val
5 3 NA E
6 4 NA F
如果您喜欢使用子集
,则此代码将提供相同的输出:
subset(DF , !duplicated(ID1) & is.na(ID2))
尝试:
尝试:
定义一个函数来查找ID1
组,这些组在ID2
中包含所有NAs,然后返回它们的唯一行
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(.))
库(dplyr)
选择_na%
分组依据(ID1)%>%
do(选择不适用()
提供您想要的内容。定义一个函数,用于查找ID1
组,其中ID2
中包含所有NAs,然后返回它们的唯一行
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(.))
库(dplyr)
选择_na%
分组依据(ID1)%>%
do(选择不适用()
提供您想要的内容。是否有其他功能区分数据帧的最后两行?否则,将无法唯一地选择这些行。可能类似于名称(table(dat$id1[is.na(dat$id2)])==1)
我认为这个问题不是很清楚。您能更清楚地解释一下选择行的规则吗?@A5C1D2H2I1M1N2O1R2T1以下所有答案都足以满足需要。前两个在实现方面相当简单。Thanks@string,然后您可能应该选择一个并将其标记为已接受…是否有任何其他功能区分数据帧的最后两行?否则,将无法唯一地选择这些行。可能类似于名称(table(dat$id1[is.na(dat$id2)])==1)
我认为这个问题不是很清楚。您能更清楚地解释一下选择行的规则吗?@A5C1D2H2I1M1N2O1R2T1以下所有答案都足以满足需要。前两个在实现方面相当简单。Thanks@string,然后您可能应该选择一个并将其标记为已接受…如果他们希望这样做,只需执行DF%>%groupby(ID1)%>%filter(sum(is.na(ID2))==n())
。我认为OP需要澄清他们的情况。@A5C1D2H2I1M1N2O1R2T1这确实简单得多,谢谢提醒。但是,我对提取“ID2为'NA'的唯一行”的解释是,在ID1
或Val
中选择具有唯一值的行。按照您的方法,两行具有相同的ID1
和Val
都将包括在内,而我的行仅包括其中一行。让我们拭目以待,看看OP是否有进一步的澄清。更直接的方法是只做DF%>%groupby(ID1)%>%filter(sum(is.na(ID2))==n())
,如果他们想要的话。我认为OP需要澄清他们的情况。@A5C1D2H2I1M1N2O1R2T1这确实简单得多,谢谢提醒。但是,我对提取“ID2为'NA'的唯一行”的解释是,在ID1
或Val
中选择具有唯一值的行。按照您的方法,两行具有相同的ID1
和Val
都将包括在内,而我的行仅包括其中一行。让我们拭目以待,看看OP是否有进一步的澄清。