【问题标题】:How to delete rows in multiple columns by unique number?如何按唯一编号删除多列中的行?
【发布时间】:2012-06-12 04:10:11
【问题描述】:

给定这样的数据

C1<-c(3,-999.000,4,4,5)
C2<-c(3,7,3,4,5)
C3<-c(5,4,3,6,-999.000)
DF<-data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3)

如何删除所有列中的 -999.000 数据

我知道这适用于每列

DF2<-DF[!(DF$C1==-999.000 | DF$C2==-999.000 | DF$C3==-999.000),]

但我想避免引用每一列。我认为有一种简单的方法可以引用特定数据框中的所有列,也就是:

DF3<-DF[!(DF[,]==-999.000),]

DF3<-DF[!(DF[,(2:4)]==-999.000),]

但显然这些不起作用

出于好奇,如果你能告诉我为什么我需要在结束方括号之前的最后一个逗号,如:

==-999.000),]

【问题讨论】:

  • 要评论一个答案-我可以在给定行中有多个 -999 值

标签: r


【解决方案1】:

以下可能有效

DF[!apply(DF==-999,1,sum),]

或者如果你可以在一行中有多个 -999

DF[!(apply(DF==-999,1,sum)>0),]

DF[!apply(DF==-999,1,any),]

【讨论】:

  • 也喜欢任何功能。谢谢!
【解决方案2】:

根据您的代码,我假设您要删除所有包含 -999 的行。

DF2 <- DF[rowSums(DF == -999) == 0, ]

至于您的额外问题:数据框是向量列表,所有向量都具有相同的长度。如果我们将向量视为列,则可以将数据框视为矩阵,其中列可能具有不同的类型(数字、字符等)。 R 允许您像引用矩阵元素一样引用数据框的元素;通过使用行和列索引。所以DF[i, j]指的是DF的jth向量中的ith元素,你可以认为是ith行和jth列。因此,如果您只想保留数据框的部分行和所有列,可以使用类似矩阵的表示法:DF[row.indices, ]

【讨论】:

    【解决方案3】:

    为了解决您的“奖励”问题,如果我们转到?Extract.data.frame 的文档,我们会发现:

    可以在多种模式下对数据帧进行索引。当使用[[[ 时 使用单个索引(x[i]x[[i]]),它们索引数据帧就像 那是一份清单。在这种用法中,drop 参数被忽略,带有 警告。

    还有:

    [[[ 与两个索引(x[i, j]x[[i, j]])一起使用时,它们 就像索引矩阵一样:[[ 只能用于选择一个元素。 请注意,对于每个选定的列,xj 通常说(如果不是 类似矩阵),结果列将是xj[i],因此依赖 对应的[方法,见示例部分。

    所以你需要逗号来确保 R 知道你指的是一行,而不是一列。

    【讨论】:

      【解决方案4】:

      我不明白您的目标是否是删除包含至少一个 NA 的所有行,如果这是您要查找的内容,那么这可能是一个可能的答案:

      DF[DF==-999] <- NA
      na.omit(DF)
         ID C1 C2 C3
      1  A  3  3  5
      3  C  4  3  3
      4  D  4  4  6
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 2012-08-05
        • 2020-06-04
        • 1970-01-01
        相关资源
        最近更新 更多