Поиск…


замечания

Data.table - это расширенная версия класса data.frame из базы R. Таким образом, атрибут class() представляет собой вектор "data.table" "data.frame" а функции, которые работают с data.frame, также будут работа с таблицей данных. Существует множество способов создания, загрузки или принуждения к таблице data.table, как показано здесь.

Принудительное использование data.frame

Чтобы скопировать файл data.frame в таблицу data.table, используйте as.data.table или data.table :

DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)

DT <- as.data.table(DF)
# or
DT <- data.table(DF)

Это редко необходимо. Исключением является использование встроенных наборов данных, таких как mtcars , которые необходимо скопировать, поскольку они не могут быть изменены на месте.

Построить с помощью data.table ()

Существует одноименный конструктор:

DT <- data.table(
  x = letters[1:5], 
  y = 1:5, 
  z = (1:5) > 3
)
#    x y     z
# 1: a 1 FALSE
# 2: b 2 FALSE
# 3: c 3 FALSE
# 4: d 4  TRUE
# 5: e 5  TRUE

В отличие от data.frame , data.table по умолчанию не будет принуждать строки к факторам:

sapply(DT, class)
#               x           y           z 
#     "character"   "integer"   "logical" 

Чтение с помощью fread ()

Мы можем читать из текстового файла:

dt <- fread("my_file.csv")

В отличие от read.csv , fread будет читать строки как строки, а не как факторы по умолчанию.

Дополнительную информацию см. В разделе [topic on fread ] [need_a_link].

Измените файл data.frame с помощью setDT ()

Для эффективности, data.table предлагает способ изменения data.frame или списка, чтобы сделать data.table на месте:

# example data.frame
DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)

# modification
setDT(DF)

Обратите внимание, что мы не <- присваиваем результат, так как объект DF был изменен на месте.

Атрибуты класса data.frame будут сохранены:

sapply(DF, class)
#         x         y         z 
#  "factor" "integer" "logical" 

Скопируйте другую таблицу данных с копией ()

# example data
DT1 = data.table(x = letters[1:2], y = 1:2, z = (1:2) > 3)

Из-за того, как манипулируют data.tables, DT2 <- DT1 не будет делать копию. То есть последующие изменения столбцов или других атрибутов DT2 также повлияют на DT1 . Когда вам нужна реальная копия, используйте

DT2 = copy(DT1)

Чтобы увидеть разницу, вот что происходит без копии:

DT2 <- DT1
DT2[, w := 1:2]

DT1
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2
DT2
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2

И с копией:

DT2 <- copy(DT1)
DT2[, w := 1:2]

DT1
#    x y     z
# 1: a 1 FALSE
# 2: b 2 FALSE
DT2
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2

Таким образом, изменения не распространяются в последнем случае.



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