Mat*_*fou 6 r data.table tibble
我主要在fromat 的小标题中使用表格tidyverse,但是对于某些步骤,我使用了data.table包装。我想看到的是转换的最佳途径data.table回tibble?
我知道它data.table具有一些巧妙的功能setDT和setDF功能,它们可以通过引用从data.frame转换为data.table(反之亦然),即无需复制。
但是,如果我想转换回小标题怎么办?我使用复制数据as_tibble的data.frame从产生的setDT()?是否有聪明的方法可以使用此方法,也许可以使用setattr()from方法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)
Run Code Online (Sandbox Code Playgroud)
正如@Frank 所提到的,这里的一篇文章对此进行了讨论。一种可能性是使用通过引用setattr()设置属性的函数。恰恰:
setattr(x, "class", c("tbl", "tbl_df", "data.frame"))
Run Code Online (Sandbox Code Playgroud)
如果对原始类有疑问:
old_class <- class(iris_tib)
setDT(iris_tib)
.... # bunch of data.table operatios
setDF(iris_tib)
setattr(iris_tib, "class", old_class)
Run Code Online (Sandbox Code Playgroud)
这似乎完成了转换回小标题的必要工作。