首页 文章

从data.table中删除多个列

提问于
浏览
62

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

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 回答

  • 32

    这看起来像一个可靠的,可重现的bug . 它被归档为Bug #2791 .

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


    UPDATE :现已修复于v1.8.11 . 来自NEWS

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

  • 13

    这个Q已被回答,但认为这是一个附注 .

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

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

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

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

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

相关问题