如何不从原始data.table中删除列?

时间:2019-09-01 14:09:27

标签: r data.table

我注意到data.table程序包的一项功能,该功能可能以某种方式与该程序包的智能内存分配有关。我想在现有数据库中创建一个新的data.table,并从新数据库中删除列。但是,:= NULL routine会从两个data.tables中删除列,而无需我特别要求。

library(data.table)

dt1 <- data.table(A = rnorm(10,5,6), B = rnorm(10,2,1), C = rnorm(10,10,2))

dt2 <- dt1

names(dt1)
names(dt2)

dt2[, c("B", "C") := NULL]

names(dt2) # Expected
# [1] "A"
names(dt1) # Weird!
# [1] "A"

我目前避免这种情况的解决方案是将data.table转换为data.frame,删除列,然后将其转换回data.table:

dt1 <- data.table(A = rnorm(10,5,6), B = rnorm(10,2,1), C = rnorm(10,10,2))

dt2 <- as.data.frame(dt1)
dt2 <- as.data.table(dt2[!names(dt2) %in% c("B", "C")])

names(dt1) # Expected
# [1] "A" "B" "C"
names(dt2) # Expected
# [1] "A"

必须有一种更直观,内存和代码有效的方式来执行此操作。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您应该使用

dt2 <- copy(dt1)