R-如何根据某些变量中NA值的数量排除案例
我有一个包含22个变量的数据框(因为数据是机密的,所以我不能在这里发布)。我需要删除变量4到22中包含所有NAs的所有案例。所以,如果某个案例在变量4到22中至少有一个非NA,我必须保留它。前三个变量中是否有NA值无关紧要,但我还需要将这三个变量保留在我的数据框架中 我正在尝试以下代码:R-如何根据某些变量中NA值的数量排除案例,r,subset,missing-data,R,Subset,Missing Data,我有一个包含22个变量的数据框(因为数据是机密的,所以我不能在这里发布)。我需要删除变量4到22中包含所有NAs的所有案例。所以,如果某个案例在变量4到22中至少有一个非NA,我必须保留它。前三个变量中是否有NA值无关紧要,但我还需要将这三个变量保留在我的数据框架中 我正在尝试以下代码: df<-df[rowSums(is.na(df[,c(4:22)]))==19] 有人对该怎么做有什么建议吗?谢谢 您非常接近解决方案。您可以在列4:22上尝试colSums。另外,包括3个TRUE,以
df<-df[rowSums(is.na(df[,c(4:22)]))==19]
有人对该怎么做有什么建议吗?谢谢 您非常接近解决方案。您可以在列
4:22
上尝试colSums
。另外,包括3个TRUE
,以保持前3列处于选中状态
df[c(rep(TRUE,3),colSums(is.na(df[4:22])) != nrow(df) )]
如果OP想要排除列4:22中所有NA
值的行
,则解决方案可以是:
df[rowSums(is.na(df[,c(4:22)])) != 19, ]
将上述解决方案应用于具有8列的数据帧,如下所示:
df[c(rep(TRUE,3),colSums(is.na(df[4:8])) != nrow(df) )]
# ID Status V1 V2 V3 V4 V5
# 1 1 0 1 0 0 0 1
# 2 1 0 1 0 0 0 1
# 3 1 1 1 1 1 1 1
# 4 2 0 2 0 0 0 2
# 5 2 1 2 1 1 1 2
# 6 2 NA 2 NA NA NA 2
# 7 3 0 3 0 0 0 3
# 8 3 1 3 1 1 1 3
# 9 3 NA 3 NA NA NA 3
# 10 3 NA 3 NA NA NA 3
示例数据帧
ID Status V1 V2 V3 V4 V5 V6
1 1 0 1 0 0 0 1 NA
2 1 0 1 0 0 0 1 NA
3 1 1 1 1 1 1 1 NA
4 2 0 2 0 0 0 2 NA
5 2 1 2 1 1 1 2 NA
6 2 NA 2 NA NA NA 2 NA
7 3 0 3 0 0 0 3 NA
8 3 1 3 1 1 1 3 NA
9 3 NA 3 NA NA NA 3 NA
10 3 NA 3 NA NA NA 3 NA
抱歉,运行此代码只剩下前三个变量。我需要保留所有22个变量,但删除变量4到22中包含所有NAs的案例。@J.Doe这就澄清了这一点。我们可以调整解决方案。它可能返回相同的数据帧,因为没有包含所有NA的变量。他使用colSums是因为它给出了变量的和,而不是行(rowSums)。我得说他的回答很准确。谢谢!现在可以了,我漏掉了一个逗号和一个!一开始。正确的行是:df@J.Doe你在提供信息方面做得很好。您可以将其写成
df[rowSums(is.na(df[,c(4:22)])!=19,]
为什么要使用数字19
?它应该是nrow(df)
,就像MKR的回答指出的那样吗?因为我想排除一行,如果它有19个NAs,因为22减去前三个变量等于19@J.Doe因此,您应该使用=代码>条件,以便哪一列少于19个NA
将返回TRUE
,因此将选择这些列。是的,但为什么一列有多少个NAs很重要?我对删除行感兴趣。@J.Doe您在这种情况下非常接近。只要在条件==19
之后添加一个,
,您就在那里了:)
ID Status V1 V2 V3 V4 V5 V6
1 1 0 1 0 0 0 1 NA
2 1 0 1 0 0 0 1 NA
3 1 1 1 1 1 1 1 NA
4 2 0 2 0 0 0 2 NA
5 2 1 2 1 1 1 2 NA
6 2 NA 2 NA NA NA 2 NA
7 3 0 3 0 0 0 3 NA
8 3 1 3 1 1 1 3 NA
9 3 NA 3 NA NA NA 3 NA
10 3 NA 3 NA NA NA 3 NA