У меня есть таблица данных и хочу исключить некоторый набор столбцов. Например,Как исключить столбцы из таблицы данных?
library(data.table)
dt <- data.table(a = 1:2, b = 2:3, c = 3:4, d = 4:5)
dt[ , .(b, c)]
Дает мне вторую и третью колонку, b и c. Как я вместо EXCLUDE столбцов b и c. Исходя из data.frame мира, я бы ожидать, что-то вроде следующего:
dt[ , -.(b, c)]
или, может быть,
dt[ , !.(b, c)]
Но neithr этих работ. Я знаю, что могу использовать
dt[ , -c(2:3), with = FALSE]
, но это просто (как я понимаю) бросает data.table как data.frame и затем использует стандартные операции. Я хотел бы избежать этого, поскольку это a) вид обмана, b) дает ускорения скорости, доступные в data.table. Я просмотрел часто задаваемые вопросы по данным. И виньетку, и я не могу найти ничего.
(я знаю, что все это очень упрощенно, и я мог бы просто выбрать другие две колонки. Однако, это микрокосм много, гораздо больше, data.table я работаю с.)
Вы можете использовать '' setdiff' т.е. дт [, setdiff (имена (дт), с (» b "," c ")), with = FALSE]' 'with = FALSE' необходимо для подмножества столбцов – akrun
. Странно, что никого из них ниже не размещали' dt [, -c ("b", "c"), с = FALSE] 'или' dt [,! C ("b", "c"), с = FALSE] '. В любом случае, вы расплывчаты в том, что вы подразумеваете под «исключить». Удаление этих столбцов из таблицы сильно отличается от создания новой таблицы, в которой нет этих столбцов. Я не думаю, что 'with = FALSE' заставляет data.table как data.frame", но если вы действительно этого хотите, вы, вероятно, хотите 'setDF'. – Frank
Я уже знаю, как сделать dt [, -c ("b", "c"), with = FALSE], о котором я упоминал в оригинальной записи. Чтобы быть ясным, у меня создается впечатление, что аргумент «with = FALSE» значительно замедляет работу data.tables, потому что тогда они рассматриваются как data.frames. Итак, я пытался избежать этого. Кроме того, «исключить», да, я имел в виду присвоение текущего DT новому DT без этих столбцов, а не удаление их на месте. (Я могу работать и с этим. Различие на самом деле не влияет на то, что я пытаюсь сделать.) – lukehawk