Отмена выбора столбца по имени, R
Есть ли способ выбрать все столбцы кадра данных, кроме столбца с определенным именем: он будет аналогом df[,-1]
, за исключением использования имени столбца вместо индекса?
Ответы
Ответ 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.