Объединить 2 столбца в новую таблицу и удалить дубликаты

Привет, я хотел бы объединить 2 столбца из таблицы и создать список уникальных значений в новой таблице.

пример: набор данных = DT

Source    Destination
A          B
A          C
B          C

Новая таблица (DT_New)

Unique names
A
B
C

Я уже пытался использовать следующий код:

DT_New <- unlist(DT)
DT_New<- data.table(DT_New)
DT_New = DT_New[!duplicated(DT_New), ]

Когда я использую этот код, он возвращает следующий результат:

Новая таблица (DT_New)

Unique names
A
B
B
C

Кажется, что приведенный выше код может отличать «B» от столбца «Источник» и столбца назначения. Как избежать этой проблемы и получить таблицу с уникальными значениями?

Unique names
A
B
C

Попробуйте unique(unlist(df)).

Ritchie Sacramento 04.06.2019 09:10

с вашим кодом я получаю желаемый результат.

jogo 04.06.2019 09:12

Я также получаю ожидаемый результат. Смотрите здесь:library(data.table); DT <- data.frame(Source= c("A", "A", "B"), Destination= c("B", "C", "C")); DT_New <- unlist(DT); DT_New<- data.table(DT_New); DT_New = DT_New[!duplicated(DT_New), ]; DT_New дает A B C

user11538509 04.06.2019 09:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
77
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Просто unlist и выберите unique значения

data.table::data.table(unique_col = unique(unlist(DT)))

#   unique_col
#1:          A
#2:          B
#3:          C

ИЛИ с вашим подходом duplicated это было бы

DT_New <- unlist(DT)
data.table(unique_col = DT_New[!duplicated(DT_New)])

Для больших наборов данных union — хороший маршрут.

data.table(unique_col = union(DT[['Source']], DT[['Destination']]))

#   unique_col
#1:          A
#2:          B
#3:          C

identical(data.table(unique_col = union(DT[['Source']], DT[['Destination']]))
          , data.table(unique_col = unique(unlist(DT))))
#[1] TRUE

Вот пример с миллионом записей в каждом столбце:

set.seed(1)
DT <- data.table(Source = sample(1:1E6, 1E6, replace = T)
                 , Destination = sample(1:1E6 + 500000, 1E6, replace = T))

Unit: milliseconds
      expr       min        lq      mean    median        uq       max neval
  dt_union  173.2102  179.4019  281.2719  222.8879  395.7681  535.6448    20
 dt_unique 1271.1621 1487.0988 1581.3864 1582.5068 1682.7661 1842.5898    20
Ответ принят как подходящий

Вы можете использовать график для хранения данных (с пакетом igraph), и тогда эти имена будут связаны с каждым узлом/вершиной:

library(igraph)
g = with(DT, graph_from_edgelist(cbind(Source, Destination)))
names(V(g))
# [1] "A" "B" "C"

Вы можете видеть, что ссылки Source->Destination сохраняются по краям:

E(g)
# + 3/3 edges from 440136f (vertex names):
# [1] A->B A->C B->C

Спасибо за все Ваши ответы. Все ваши ответы были правильными, но не решали мою конкретную проблему. Поэтому я понял, что проблема должна быть в коде подготовки данных... Судя по всему, в конце каждого значения исходного столбца был пробел, который не отображается в табличном представлении Rstudio. Глупая ошибка...

Благодаря ответу Фрэнка я увидел пробел.

Другие вопросы по теме

Как удалить повторяющиеся данные, включая исходные данные, в datagridview vb.net
Как удалить дубликаты на основе не только одного, но и двух условий из других столбцов
Удаление повторяющихся значений из временного ряда в MATLAB
Удалить повторяющееся значение из массива массива
Подмножество данных на основе повторяющихся значений в разных столбцах в строке
2D-массив — как удалить повторяющиеся значения, но сохранить подмассивы разделенными
Дублируйте строки во фрейме данных в R, используя «правило математической комбинации» на основе количества допустимых значений для определенных переменных
Как удалить дубликаты на основе условия относительно значений даты с помощью Python?
Как удалить повторяющиеся строки одного столбца в пандах при объединении значений остальных столбцов?
Когда я выбираю, проверяется только один столбец без дубликатов