data.table
Добавление и изменение столбцов
Поиск…
замечания
Официальная виньетка «Справочная семантика» - лучшее введение в эту тему.
Напоминание: синтаксис DT[where, select|update|do, by]
используется для работы с столбцами таблицы данных.
- Часть «где» является аргументом
i
- Часть «select | update | do» является аргументом
j
Эти два аргумента обычно передаются положением вместо имени.
Все изменения в столбцах можно сделать в j
. Кроме того, функция set
доступна для этого использования.
Редактирование значений
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Редактирование столбца
Используйте оператор :=
внутри j
для создания новых столбцов или изменения существующих:
DT[, mpg_sq := mpg^2]
Редактирование подмножества строк
Используйте аргумент i
для подмножества в строки «где» должны быть сделаны изменения:
DT[1:3, newvar := "Hello"]
Как и в data.frame, мы можем подмножество, используя номера строк или логические тесты. Также возможно использовать [a «join» in i
при изменении] [need_a_link].
Удаление столбца
Удалите столбцы, установив NULL
:
DT[, mpg_sq := NULL]
Обратите внимание, что мы не <-
присваиваем результат, так как DT
был изменен на месте.
Редактирование нескольких столбцов
Добавьте несколько столбцов, используя многомерный формат оператора :=
:
DT[, `:=`(mpg_sq = mpg^2, wt_sqrt = sqrt(wt))]
# or
DT[, c("mpg_sq", "wt_sqrt") := .(mpg^2, sqrt(wt))]
Синтаксис .()
Используется, когда правая часть LHS := RHS
- это список столбцов.
Редактирование нескольких последовательно зависимых столбцов
Если столбцы зависят и должны быть определены последовательно, некоторые способы сделать это:
DT[, c("mpg_sq", "mpg2_hp") := .(temp1 <- mpg^2, temp1/hp)]
# or
DT[, c("mpg_sq", "mpg2_hp") := {temp1 = mpg^2; .(temp1, temp1/hp)}]
Редактирование столбцов динамически определяемыми именами
Для динамически определяемых имен столбцов используйте круглые скобки:
vn = "mpg_sq"
DT[, (vn) := mpg^2]
Использование set
Столбцы также могут быть изменены с помощью set
для небольшого сокращения накладных расходов, хотя это редко необходимо:
set(DT, j = "hp_over_wt", v = mtcars$hp/mtcars$wt)
Переупорядочивающие столбцы
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Чтобы изменить порядок столбцов, используйте setcolorder
. Например, чтобы отменить их
setcolorder(DT, rev(names(DT)))
Это почти ничего не стоит с точки зрения производительности, поскольку оно просто переставляет список указателей столбцов в таблице данных.
Переименование столбцов
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Чтобы переименовать столбец (сохраняя при этом свои данные одинаковыми), нет необходимости копировать данные в столбец с новым именем и удалять старый. Вместо этого мы можем использовать
setnames(DT, "mpg_sq", "mpq_squared")
изменить исходный столбец по ссылке.
Изменение уровней факторов и других атрибутов столбца
# example data
DT = data.table(iris)
Чтобы изменить уровни факторов по ссылке, используйте setattr
:
setattr(DT$Species, "levels", c("set", "ver", "vir")
# or
DT[, setattr(Species, "levels", c("set", "ver", "vir"))]
Второй вариант может напечатать результат на экране.
С setattr
мы избегаем копии, обычно возникающей при выполнении levels(x) <- lvls
, но она также пропускает некоторые проверки, поэтому важно быть осторожным, чтобы назначить действительный вектор уровней.