Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
在索引变量中使用NAs子集R数据帧_R - Fatal编程技术网

在索引变量中使用NAs子集R数据帧

在索引变量中使用NAs子集R数据帧,r,R,我有一个包含流行病学数据的大数据框(48232行和74列)。我将其作为.csv文件读入R,并使用命令na.strings=“na”。我有几个二分法变量,答案是/否,编码为0=是,1=否。这些变量还包含NAs。我想创建一个包含所有列的新数据框,但删除那些具有Diab=0的示例,不删除Diab=NA。我用方括号来表示。这样做时,新数据框的维度是正确的,但是,对于新数据框中的所有其他二分变量,所有Diab=NA的样本最终都是NA!我如何解决这个问题?我尝试生成一个小示例: Diab<-c(

我有一个包含流行病学数据的大数据框(48232行和74列)。我将其作为.csv文件读入R,并使用命令na.strings=“na”。我有几个二分法变量,答案是/否,编码为0=是,1=否。这些变量还包含NAs。我想创建一个包含所有列的新数据框,但删除那些具有Diab=0的示例,删除Diab=NA。我用方括号来表示。这样做时,新数据框的维度是正确的,但是,对于新数据框中的所有其他二分变量,所有Diab=NA的样本最终都是NA!我如何解决这个问题?我尝试生成一个小示例:

   Diab<-c(0,NA,1,1,1,0,0,NA, NA)
INF<-c(0,1,1,1,1,1,NA, 0,1)
HYP<-c(NA, 0,1,0,NA,1,1,1,1)

a<-data.frame(cbind(Diab, INF, HYP))
dim(a)
table(a$Diab,a$HYP, exclude=NULL, dnn=c("Diab", "HYP"))
#In total 2 persons HYP=0, 5 persons HYP=1, 2 persons HYP=NA. 

b<-a[!a$Diab==0,]
dim(b)
##When removing those Diab=0 I'm expecting to still have 2 persons HYP=0, 
#3 persons HYP=1 and 1 person HYP=NA, but not...

table(b$HYP, exclude=NULL, dnn="HYP")
#6 persons in total but those that were Diab=NA are now turned into HYP=NA??

#The same happens with the INF variable.
table(a$Diab,a$INF, exclude=NULL, dnn=c("Diab", "INF"))
table(b$INF, exclude=NULL, dnn="INF")

Diab我想这就是你想要的:

> a[(a$Diab != 0) | is.na(a$Diab),]
  Diab INF HYP
2   NA   1   0
3    1   1   1
4    1   1   0
5    1   1  NA
8   NA   0   1
9   NA   1   1

您需要在
Diab
中找到不等于零(
!=0
)或等于
NA
是.NA
)的条目。布尔运算符
|
表示

问题在于您试图对包含
NA
的数据列进行子集。您必须制定一种更有效的方法来子集数据集

正如你所写的:

> a$Diab
[1]  0 NA  1  1  1  0  0 NA NA
这些值中哪一个不等于零

> !a$Diab==0
[1]  TRUE    NA FALSE FALSE FALSE  TRUE  TRUE    NA    NA
如你所见。在评估NA:s时,您会得到NA:s作为答案。同样,您不能执行以下操作:

> c(NA,NA,3)+1
[1] NA NA  4
你明白了。。脚本无法在数据帧中选择正确的行,因为它返回
NA
s,因此您在子集数据帧中得到
NA
s

解决方案:将
NA
s更改为您可以更容易处理的内容(如果需要),或者调整脚本以对调整为
NA
值的数据进行子集化
is.na()
是一个可用于此情况的函数。因此,让我们在Diab列中选择所有不等于0的值或
NA
s的值:

> a[(a$Diab != 0) | is.na(a$Diab),]
  Diab INF HYP
2   NA   1   0
3    1   1   1
4    1   1   0
5    1   1  NA
8   NA   0   1
9   NA   1   1

有关缺少值的更多信息,.

非常感谢你们两位!谢谢你的快速回答!那帮了大忙!如果这解决了你的问题,你可以按我答案左边的绿色记号。这让每个人都知道你有答案。