Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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_Na - Fatal编程技术网

R 从单个操作和比较中排除具有NA值的行的简单或默认方法

R 从单个操作和比较中排除具有NA值的行的简单或默认方法,r,na,R,Na,我处理调查数据,其中缺少的值是规则,而不是例外。我的数据集总是有很多NAs,对于简单的统计数据,我通常希望处理那些在特定操作所需的变量子集上完整的案例,而忽略其他案例 如果输入中有任何NAs,则R的大多数基函数返回NA。此外,使用比较运算符的子集将为其中一个变量上带有NA的任何行返回一行NAs。我真的不想要这两种行为中的任何一种 对于R,我希望默认情况下为其操作的变量排除带有NAs的行,并为其余行返回结果(请参见下面的示例) 以下是我目前了解的解决方法: 指定na.rm=T:还不错,但并非所有函

我处理调查数据,其中缺少的值是规则,而不是例外。我的数据集总是有很多NAs,对于简单的统计数据,我通常希望处理那些在特定操作所需的变量子集上完整的案例,而忽略其他案例

如果输入中有任何NAs,则R的大多数基函数返回NA。此外,使用比较运算符的子集将为其中一个变量上带有NA的任何行返回一行NAs。我真的不想要这两种行为中的任何一种

对于R,我希望默认情况下为其操作的变量排除带有NAs的行,并为其余行返回结果(请参见下面的示例)

以下是我目前了解的解决方法:

  • 指定
    na.rm=T
    :还不错,但并非所有函数都支持它
  • 添加
    !is.na()
    适用于所有比较操作:工作正常,但手工操作很烦人且容易出错,尤其是当涉及多个变量时
  • 使用
    complete.cases()
    :没有帮助,因为我不想排除缺少任何变量的情况,只排除当前操作中使用的变量
  • 创建一个包含所需案例的新数据框:通常每行都缺少一些分散的变量。这意味着每当我想从一个变量切换到另一个变量时,我必须显式地创建一个新的子集
  • 使用插补:并不总是合适的,尤其是在计算描述或只是检查数据时 我知道如何在任何给定的情况下获得所需的结果,但是为我编写的每段代码显式地处理NAs会占用大量时间。希望有一些简单的解决办法,我错过了。但复杂或部分解决方案也将受到欢迎

    示例:

    > z<-data.frame(x=c(413,612,96,8,NA), y=c(314,69,400,NA,8888))
    
    # current behavior: 
    > z[z$x < z$y ,]
    
          x   y
    3    96 400
    NA   NA  NA
    NA.1 NA  NA
    
    # Desired behavior:
    > z[z$x < z$y ,]
    
          x   y
    3    96 400
    
    # What I currently have to do in order to get the desired output:
    > z[(z$x < z$y) & !is.na(z$x) & !is.na(z$y) ,]
    
          x   y
    3    96 400
    
    >z z[z$xz[z$xz[(z$x
    在不平等情况下处理NAs的一个技巧是

    z[which(z$x < z$y),]
    
    #    x   y
    # 3 96 400
    
    z[其中(z$x

    which()
    会自动删除NA值。
    NA.ommit
    函数在这里可能很方便:
    NA.ommit(z[z$x
    根据您在代码中的使用方式,您可以尝试
    子集
    而不是提取(
    [
    )。这会给出所需的行为:
    子集(z,x
    。输入更少,并且不会随着涉及的变量数量的增加而增加。这绝对是一种改进!