R data.table:如何从小标题到data.table再到小标题?

时间:2018-09-20 18:38:05

标签: r data.table tibble

我主要使用tidyverse中fromat的 tibble 中的表,但是对于某些步骤,我使用data.table包。我想看看将 data.table 转换回 tibble 的最佳方法是什么?

我知道data.table具有一些巧妙的功能setDTsetDF,它们可以将 data.frame 转换为 data.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 :(得分:1)

如@Frank所述,这在帖子here中进行了讨论。一种可能性是使用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)

似乎可以完成将其转换回小标题的必要工作。