【问题标题】:Issues filtering dataframe since NA rows creep in自 NA 行蔓延以来过滤数据帧的问题
【发布时间】:2017-04-03 18:25:50
【问题描述】:

我正在尝试在整个数据帧上使用逻辑运算符过滤数据帧,并且不知何故 NA 行在子集数据帧中蔓延。我已经查看了Subsetting R data frame results in mysterious NA rowsSubsetting R data frame results in mysterious NA rows,但我无法找到或找到解决方案。

df <- data.frame(number1 = c(1:5,-13,-2,-34,24,33), number2 = c(10:3, -73, -82))
df
df[df>=0 & !is.na(df$number2),]

我正在尝试过滤,以便在原始数据框中的任何行中都没有负值。我最终得到 18 行 df 和多个 NA 行。

我尝试在我的 df 上使用 sapply 来检查逻辑操作是否正常。但如果我用 "which" 换行,我会得到所有 18 行。

sapply(names(df), function(x) df[x]>=0)

我的目标是在任何列中获得一个没有负值的 df。

编辑:在我的情况下,我不知道结果 df 在过滤它们之前会有多少列。因此,使用 & 运算符单独过滤列是不可能的。这正是我试图应用逻辑运算符或整个 df 的原因

【问题讨论】:

    标签: r subset na


    【解决方案1】:

    首先认为您需要将矩阵减少为单个向量。如果您想将其推广到任意数量的列,您可以这样做

    df[Reduce(`&`, lapply(df, `>=`, 0)), ]
    #   number1 number2
    # 1       1      10
    # 2       2       9
    # 3       3       8
    # 4       4       7
    # 5       5       6
    

    df[rowSums(df >= 0) == ncol(df), ]
    #   number1 number2
    # 1       1      10
    # 2       2       9
    # 3       3       8
    # 4       4       7
    # 5       5       6
    

    【讨论】:

      【解决方案2】:

      试试下面的。在所需条件之间使用 AND

      > df[df$number1>0 & df$number2>0,]
        number1 number2
      1       1      10
      2       2       9
      3       3       8
      4       4       7
      5       5       6
      

      【讨论】:

        【解决方案3】:

        问题是您试图过滤行,这意味着您应该将一维逻辑向量传递给选择器,而不是传递一个二维逻辑矩阵。使用这个矩阵作为选择器意味着行不一定会被过滤,值只会被删除。

        如果您执行以下操作,它将删除所有具有负值的行,而不会产生任何结果 NA

        df <- data.frame(number1 = c(1:5,-13,-2,-34,24,33), number2 = c(10:3, -73, -82))
        df
        df[df[,1]>=0 & df[,2]>=0,]
        

        其中df[,1]&gt;=0 &amp; df[,2]&gt;=0 返回两列均为正数的行的一维逻辑向量。

        【讨论】:

        • 谢谢。但这只有在我知道我的 df 中有多少列时才有效。就我而言,在过滤它们之前,我不知道结果 df 会有多少列。这正是我试图应用逻辑运算符或整个 df 的原因
        猜你喜欢
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-23
        • 2016-12-21
        • 1970-01-01
        • 2015-10-19
        相关资源
        最近更新 更多