从对象中删除/删除data.table
类,将其转换回 data.frame 的最安全方法是什么?
我问是因为我使用的脚本依赖于以下代码:
newcol.index <- ncol(my.data) +1
my.data[,newcol.index] <- 3
colnames(my.data)[newcol.index] <- "test"
这些data.table
包显然不喜欢这样,但是使用 class 的对象可以正常工作data.frame
。
从对象中删除/删除data.table
类,将其转换回 data.frame 的最安全方法是什么?
我问是因为我使用的脚本依赖于以下代码:
newcol.index <- ncol(my.data) +1
my.data[,newcol.index] <- 3
colnames(my.data)[newcol.index] <- "test"
这些data.table
包显然不喜欢这样,但是使用 class 的对象可以正常工作data.frame
。
as.data.frame
data.tables的方法可能是最安全的函数。(尝试键入getAnywhere("as.data.frame.data.table")
以查看它的确切作用。)
library(data.table)
DT <- data.table(a=1:4, b=letters[c(1,1,2,2)], key="a")
class(as.data.frame(DT)) ## OR: as(X, "data.frame")
# [1] "data.frame"
如果您愿意将脚本转换为 data.table,您可以使用 use:=
通过引用分配,这将自动分配给(ncol(youdata)+1)th
列,您可以将名称的字符向量传递给函数的 LHS。它将通过引用分配,所以不要复制!
DT <- data.table(a = 1, b = 2)
DT[,'test' := 3]
DT
a b test
1: 1 2 3
这是如何从data.table转换为数据框的示例
library(tidyverse)
library(data.table)
df <- data.frame(a = 1:5, b = 6:10, c = LETTERS[5:9])
class(df)
#[1] "data.frame"
df <- data.table(df)
class(df)
#[1] "data.table" "data.frame"
class(df) <- class(as.data.frame(df))
class(df)
#[1] "data.frame"