Как удалить два столбца с одинаковым именем в таблице данных R - PullRequest
1 голос
/ 03 мая 2020

У меня есть следующая таблица данных:

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 и затем сделать это снова, но я хотел проверить, есть ли способ сделать это с помощью таблицы данных. Я попытался предписанным способом ( Удаление нескольких столбцов из R data.table с параметром для столбцов для удаления ), но я не могу приступить к работе:

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).

Я знаю, что с тем же столбцом имя не является идеальным, но мне было интересно, есть ли какая-то команда, которую я пропускаю.

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Вместо этого вы можете использовать индексы.

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]
1 голос
/ 03 мая 2020

Вы можете выбрать столбцы, которые мы хотим сохранить, вместо того, чтобы устанавливать их на 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...