Удаление столбца / столбцов из нескольких фреймов данных - PullRequest
0 голосов
/ 09 декабря 2018

Допустим, у меня есть несколько фреймов данных одного и того же столбца, но в другом порядке.Я хочу удалить столбец из всех фреймов данных сразу.Например, присутствуют столбцы с именем «Группа 1» и «Группа 2».Я попробовал это, но не получилось.

remover<-function(input){

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

  return(input)

}

Кроме того, я увидел эту ссылку ( Как удалить определенные столбцы в нескольких фреймах данных в R? ) и не хочу использовать списки.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 09 декабря 2018

Во-первых, не очень разумно использовать имена переменных с пробелами.Вместо этого используйте точки, например "Group.1".

Секунда, в то время как c("Group 1","Group 2") работает, -c("Group 1","Group 2") не будет, потому что вы пытаетесь делать арифметику с символами: - "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

Существует еще одна опция для достижения отрицанияимена вместо -.Мы можем использовать !.

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

Данные:

* 1026 может быть незначительным*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...