R data.table: как перейти от таблицы данных к таблице данных обратно? - PullRequest
0 голосов
/ 20 сентября 2018

Я использую в основном таблицы в формате tibble от tidyverse, но для некоторых шагов я использую пакет data.table.Я хочу посмотреть, как лучше конвертировать data.table обратно в tibble ?

Я понимаю, что data.table имеет некоторую умную функцию setDT и setDF , которые преобразуют из data.frame в данные.table (и наоборот) по ссылке, т.е. без копирования.

Но что, если я захочу преобразовать обратно в tibble ?Копирую ли я данные с помощью as_tibble на data.frame , полученном из setDT()?Есть ли умный способ использовать это, может быть, используя setattr() от data.table?

library(data.table)
library(tidyverse)

iris_tib <- as_tibble(iris)

## some data.table operation
setDT(iris_tib)
setkey(iris_tib, Species)
iris_tib[, Sepal.Length.Mean := mean(Sepal.Length), by = Species]



## How to convert back to tibble efficiently?
setDF(iris_tib)
iris_tib_back <-  as_tibble(iris_tib)

## it looks like we were able to update by reference? Only rownames were (shallow) copied?
changes(iris_tib, iris_tib_back)

1 Ответ

0 голосов
/ 29 сентября 2018

Как упоминал @Frank, это обсуждалось в посте здесь .Одна из возможностей - использовать функцию setattr(), которая устанавливает атрибуты по ссылке .Точно:

setattr(x, "class", c("tbl", "tbl_df", "data.frame"))

И если есть сомнения относительно исходного класса:

old_class <- class(iris_tib)
setDT(iris_tib)
.... # bunch of data.table operatios
setDF(iris_tib)
setattr(iris_tib, "class", old_class)

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

...