【问题标题】:How to remove two columns with the same name in data table R如何删除数据表R中同名的两列
【发布时间】:2020-05-03 10:46:33
【问题描述】:

我有如下数据表:

my_dt = data.table(a = c(1,2,3), b = c(2,3,4), a = c(8,9,9))
> my_dt
   a b a
1: 1 2 8
2: 2 3 9
3: 3 4 9

该表有两个同名的列,我想删除它们。我可以简单地将a 设置为 NULL,然后再做一次,但我想检查是否有数据表方法可以做到这一点。 我尝试了规定的方式(Removing multiple columns from R data.table with parameter for columns to remove)但我无法上班:

cols_to_delete = "a"
my_dt[, (cols_to_delete) := NULL]
#Only deletes the first occurence
> my_dt
   b a
1: 2 8
2: 3 9
3: 4 9

cols_to_delete = c("a", "a")
my_dt[, (cols_to_delete) := NULL]
Error in `[.data.table`(my_dt, , `:=`((cols_to_delete), NULL)) : 
  Can't assign to the same column twice in the same query (duplicates detected).

我知道使用相同的列名并不理想,但我想知道是否缺少某些命令。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以改用索引。

    cols_to_delete = c(1, 3)
    # OR
    # cols_to_delete <- which(duplicated(names(my_dt))  | duplicated(names(my_dt),fromLast = TRUE))
    my_dt[, (cols_to_delete) := NULL]
    

    【讨论】:

      【解决方案2】:

      您可以选择我们要保留的列,而不是将它们设置为NULL

      这可以通过

      来完成
      library(data.table)
      cols_to_delete = "a"
      my_dt[,names(my_dt) != cols_to_delete, with = FALSE]
      
      #   b
      #1: 2
      #2: 3
      #3: 4
      

      或者使用setdiff

      my_dt[,setdiff(names(my_dt), cols_to_delete), with = FALSE]
      

      还有:

      cols <- setdiff(names(my_dt), cols_to_delete)
      my_dt[,..cols]
      

      【讨论】:

      • 或者,您可以只选择所有 OTHER 列。
      • 我想这就是我正在做的事情。选择除“a”之外的所有其他列。你的意思是别的吗?
      猜你喜欢
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      相关资源
      最近更新 更多