Поиск…


замечания

Официальная виньетка «Справочная семантика» - лучшее введение в эту тему.

Напоминание: синтаксис 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 , но она также пропускает некоторые проверки, поэтому важно быть осторожным, чтобы назначить действительный вектор уровней.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow