【问题标题】:Deselecting a column by name按名称取消选择列
【发布时间】:2012-04-06 00:34:54
【问题描述】:

有没有办法选择数据框中的所有列,除了具有特定名称的列。

它类似于df[, -1],除了使用列名而不是索引?

【问题讨论】:

  • 我想提供data.table 作为data.frame 的替代品。它提供了更好的选择可能性。

标签: r indexing dataframe slice


【解决方案1】:

您可以使用向量子集来做到这一点。首先,创建一个虚拟数据集:

R> dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)

然后使用! 运算符来反转选择:

R> dd[ ,!(colnames(dd) == "A")]

  B C D
1 1 1 1
2 2 2 2
3 3 3 3

或者,您可以:

  • 略短的版本(@Tomas 提供):

    dd[ , names(dd) != "A"]
    
  • 处理多列(@Tyler 提供)

    dd[ ,!(colnames(dd) %in% c("A", "B"))]
    

【讨论】:

    【解决方案2】:

    可以使用which() 函数来识别要消除的列。

    dd <- data.frame(A = 1:5, B = 1:5, C=1:5)
    
    dd[, -which(names(dd) == "A")]
    

    或积极

    dd[, which(names(dd) != "A")]
    

    但是,如果没有名为“A”的列,您将获得一个包含 0 列和nrow(dd) 行的数据框。因此,最好检查是否存在名为“A”的列。

    if(any(names(dd) == "A")) {
      dd[, which(names(dd) != "A")]
    }
    

    【讨论】:

      【解决方案3】:

      subset 函数已经允许这种类型的语法,来自帮助页面上的示例:

      subset(airquality, Day == 1, select = -Temp)
      

      【讨论】:

        【解决方案4】:

        要取消选择多个列,您可以使用 dplyr 包。举个例子:

        dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
        
        library(dplyr)
        newdd <- select(dd, -A,-C)
        

        这是@csgillespie 建议之外的另一种方式。

        【讨论】:

          【解决方案5】:

          删除 A 和 C

          base解决方案

          df <- data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
          
          df[,c("A","C")]<-NULL
          

          data.table解决方案

          dt <- data.table(A = 1:3, B = 1:3, C=1:3, D=1:3)
          
          #    A B C D
          # 1: 1 1 1 1
          # 2: 2 2 2 2
          # 3: 3 3 3 3
          
          dt[,c("A","C"):=NULL]
          
          #   B D
          #1: 1 1
          #2: 2 2
          #3: 3 3
          

          【讨论】:

            猜你喜欢
            • 2012-02-03
            • 2023-01-31
            • 1970-01-01
            • 2023-03-29
            • 1970-01-01
            • 2021-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多