r - 在没有某些列的情况下创建的对象会修改其他对象
问题描述
我开始使用带有 data.table 的 r-studio 来学习 r,所以我很抱歉问这个基本的东西。这就是我所拥有的(在 r-markdown 上工作):
对象 1:
ps.data <- fread("database.csv")
我正在尝试创建一个与“ps.data”相同的对象,但删除了“database.csv”具有的 5 个列(同时),但更改了“ps.data”。到目前为止,我已经尝试过这个:
第一次尝试:有效,但效率极低。
ps.data2<-ps.data[,"col1":=NULL]
ps.data3<-ps.data2[,"col2":=NULL]
...
ps.data6<-ps.data5[,"col5":=NULL]
然后删除我不需要的所有对象。
第二次尝试:即使它创建了没有删除列的对象,但问题是现在我打开“ps.data”并且代码也删除了该列中的列。
ps.data2<- ps.data[, c("col1","col2","col3","col4","col5"):=NULL]
解决方案
编辑:我最初完全错了。这是使用data.table::copy
命令强制 data.table 复制数据的解决方案,而不是仅引用它。
ps.data2<- copy(ps.data)
ps.data2[, c("col1","col2","col3","col4","col5"):=NULL]
原因如下: 准确了解 data.table 何时是对另一个 data.table 的引用(相对于副本)
基本上,当您 put 时ps.data2<-ps.data
, data.table 只是创建对原始数据的引用。关于何时通过引用创建或实际复制事物,这看起来像是一个更复杂的讨论,但请查看上面的链接。
推荐阅读
- sql - 查询以查找取决于表中不同列的列中的值是最小日期
- angular - 角度反应形式数据转换
- java - 如何在JavaFX中鼠标悬停时使屏幕外选项卡/窗格滑入主窗口
- qt - Qt无法加入指定networkInterface的多播组
- php - Laravel 递归 whereHas on BelongsToMany 关系
- python - 嵌套字典和列表的单词计数器
- javascript - 使用 JWT 进行 NodeJS 用户身份验证
- github - 仅当上一步已运行时才运行 GitHub Actions 步骤
- python - 如果没有打印 python 字典键字符串值的条件匹配
- go - 在 Go 中遍历孩子的谱系