Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-如何根据某些变量中NA值的数量排除案例_R_Subset_Missing Data - Fatal编程技术网

R-如何根据某些变量中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,以

我有一个包含22个变量的数据框(因为数据是机密的,所以我不能在这里发布)。我需要删除变量4到22中包含所有NAs的所有案例。所以,如果某个案例在变量4到22中至少有一个非NA,我必须保留它。前三个变量中是否有NA值无关紧要,但我还需要将这三个变量保留在我的数据框架中

我正在尝试以下代码:

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