首页 文章

从多个数据帧中删除列

提问于
浏览
1

假设我有多个相同列但具有不同顺序的data.frames . 我想一次从所有数据框中删除一列 . 例如,假设存在名为“Group 1”和“Group 2”的列 . 我尝试了这个但失败了 .

remover<-function(input){

  input<-input[,-c("Group 1","Group 2")]

  return(input)

}

另外,我看到了这个链接(How to remove certain columns in multiple data frames in R?)并且不想使用列表 .

任何帮助,将不胜感激 .

1 回答

  • 0

    首先,使用带有空格的变量名称并不是很明智 . 而是使用点,例如 "Group.1" .

    第二,虽然 c("Group 1","Group 2") 有效, -c("Group 1","Group 2") 赢了't, because you'试图用字符做算术: - "Group.1" 没有多大意义,是吗?

    所以我们可以使用 %in% 这是一种匹配运算符和 which() ,它给出了元素的索引 .

    remover <- function(input) {
      input <- input[, -which(names(input) %in% c("Group.1", "Group.2"))]
      return(input)
    }
    
    x1 <- remover(df1)
    > x1
      X1 X2
    1  4 10
    2  5 11
    3  6 12
    

    还有另一个选项来实现对colnames的否定,而不是 - . 我们可以使用 ! .

    remover2 <- function(input) {
      input <- input[, which(!names(input) %in% c("Group.1", "Group.2"))]
      return(input)
    }
    

    使用 ! 可能会有轻微的速度优势 .

    Unit: microseconds
              expr    min     lq     mean median     uq       max neval cld
      remover(df1) 26.789 28.065 30.27720 28.321 28.831 18419.152 1e+05   a
     remover2(df1) 26.534 27.810 30.09483 28.065 28.576  6056.713 1e+05   a
    
    > all.equal(x1, x2)
    [1] TRUE
    

    数据:

    df1 <- data.frame(matrix(1:12, 
                             3, 4, 
                             dimnames=list(NULL, c("Group.1", "X1", 
                                                   "Group.2", "X2"))))
    

相关问题