r - 如何不从原始 data.table 中删除列?
问题描述
我注意到包的一个特性data.table
,它可能与包的巧妙内存分配有关。我想从现有的数据表中创建一个新的 data.table 并从新的数据表中删除列。但是,该:= NULL
例程会在我没有特别要求的情况下从两个 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"
必须有一种更直观、内存和代码效率更高的方式来执行此操作。有什么建议么?
解决方案
你应该使用
dt2 <- copy(dt1)
推荐阅读
- c# - .NET Core Cronos Cron 表达式未正确解析
- python-3.x - 使用 Python 重命名批处理文件
- django - Django OperationalError 没有这样的表:
- docker - 如何为 Joomla 等多个容器使用相同的 MySQL 和相同的 PHPMyAdmin!和WordPress?
- node.js - 卡在单个请求中的 Nodejs HTTP 响应
- r - ggplot2:无效输入:使用 scale_x_datetime 时的 time_trans
- reactjs - ReactJS - 显示列名
- mule-studio - 在dataweave中转换日期时间格式
- rust - Cargo 的 build 和 rustc 命令有什么区别?
- r - 即使使用 DPLYR 包中的 SELECT 列存在,也无法对列进行子集化