Выбор подмножества столбцов в таблице данных.

Я бы хотел напечатать все столбцы таблицы данных dt кроме одного из них с именем V3 но не хочу ссылаться на него по номеру, но по имени. Это код, который у меня есть:

  dt = data.table(matrix(sample(c(0,1),5,rep=T),50,10)) dt[,-3,with=FALSE] # Is this the only way to not print column "V3"? 

Используя способ data frame , можно сделать это через код:

  df = data.frame(matrix(sample(c(0,1),5,rep=T),50,10)) df[,!(colnames(df)%in% c("X3"))] 

Итак, мой вопрос: есть ли другой способ не печатать один столбец в таблице данных без необходимости ссылаться на него по номеру? Я хотел бы найти нечто похожее на синтаксис фрейма данных, который я использовал выше, но используя таблицу данных.

Используйте очень похожий синтаксис, как для data.frame , но добавьте аргумент with=FALSE :

 dt[, setdiff(colnames(dt),"V9"), with=FALSE] V1 V2 V3 V4 V5 V6 V7 V8 V10 1: 1 1 1 1 1 1 1 1 1 2: 0 0 0 0 0 0 0 0 0 3: 1 1 1 1 1 1 1 1 1 4: 0 0 0 0 0 0 0 0 0 5: 0 0 0 0 0 0 0 0 0 6: 1 1 1 1 1 1 1 1 1 

Использование with=FALSE хорошо объяснено в документации для аргумента j в ?data.table :

j: имя одного столбца, один экземпляр имен столбцов, list() выражений имен столбцов, выражение или вызов функции, который оценивает список (включая data.frame и data.table которые также являются списками) или (когда with=FALSE ), то же самое, что и j в [.data.frame .


Начиная с версии 1.1.2, это также можно сделать следующим образом:

 keep <- setdiff(names(dt), "V9") dt[, ..keep] 

Префикс символа с .. будет искать в области вызова (то есть в Глобальной среде), и его значение будет иметь имена столбцов или номера ( источник ).

Вот способ, который использует grep для преобразования в числовой и допускает отрицательную индексацию столбцов:

 dt[, -grep("^V3$", names(dt)), with=FALSE] 

Вы сказали, что «V3» должен быть исключен, не так ли?

Может быть, это только в последних версиях data.table (я использую 1.9.6), но вы можете сделать:

 dt[, -'V3', with=FALSE] 

Для нескольких столбцов:

 dt[, -c('V3', 'V9'), with=FALSE] 

Обратите внимание, что необходимы цитаты вокруг имен переменных.

  • Простой подход к назначению кластеров для новых данных после кластеризации k-средних
  • Получение строк, распознаваемых как имена переменных в R
  • Заполните область между двумя линиями, сглаженными лессой, в R с ggplot
  • Быстрое расстояние Левенштейна в R?
  • Прочитать текстовый файл UTF-8 с помощью спецификации
  • Эффективный способ rbind data.frames с разными столбцами
  • Использование ggplot () в рамках другой функции в R
  • Как получить максимальное значение по группе
  • ggplot2: цвет полосы facet_wrap на основе переменной в наборе данных
  • Согласованная ширина для geom_bar в случае отсутствия данных
  • Преобразование непрерывных числовых значений в дискретные категории, определенные интервалами
  • Давайте будем гением компьютера.