从data.table中删除多个列

时间:2013-05-19 19:16:59

标签: r data.table

从data.table中删除多个列的正确方法是什么?我目前正在使用下面的代码,但是当我不小心重复其中一个列名时出现意外行为。我不确定这是不是一个错误,或者我不应该这样删除列。

library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"

以上工作正常,但

DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"

2 个答案:

答案 0 :(得分:33)

这看起来像一个可靠,可重现的错误。它已被归档为Bug #2791

重复列似乎会尝试删除后续列 如果没有列,则R崩溃。


更新:现已在v1.8.11中修复。来自NEWS

  

在同一查询中两次分配给同一列现在是错误而不是在某些情况下崩溃;例如,DT [,c(“B”,“B”):= NULL](通过引用删除两次相同的列)。感谢Ricardo(#2751)和matt_k(#2791)进行报道。测试补充说。

答案 1 :(得分:13)

此问题已得到回答,但请将此视为旁注。

我更喜欢以下语法删除多列

DT[ ,`:=`(x = NULL, y = NULL)]

因为它匹配一个添加多个列(变量)

DT[ ,`:=`(x = letters, y = "Male")]

这也检查重复的列名称。因此,尝试删除x两次将抛出错误消息。