Удалите повторяющиеся пары столбцов, сортируйте строки на основе двух столбцов

в следующем фрейме данных я хочу держать строки только один раз, если они имеют повторяющиеся пары (1 4 и 4 1 считаются одной и той же парой) Var1 и Var2 . Я думал о сортировке Var1 и Var2 в строке, а затем удалять повторяющиеся строки на основе Var1 и Var2 . Однако я не добираюсь до желаемого результата.

Вот как выглядят мои данные:

 Var1 <- c(1,2,3,4,5,5) Var2 <- c(4,3,2,1,5,5) f <- c("blue","green","yellow","red","orange2","grey") g <- c("blue","green","yellow","red","orange1","grey") testdata <- data.frame(Var1,Var2,f,g) 

Я могу сортировать строки, но значения столбцов f и g должны оставаться нетронутыми, как мне это сделать?

 testdata <- t(apply(testdata, 1, function(x) x[order(x)])) testdata <- as.data.table(testdata) 

Затем я хочу удалить повторяющиеся строки на основе Var1 и Var2

Я хочу получить это как результат:

 Var1 Var2 fg 1 4 blue blue 2 3 green green 5 5 orange2 orange1 

Спасибо за вашу помощь!

Вместо сортировки для всего набора данных сортируйте «Var1», «Var2», а затем используйте duplicated для удаления повторяющихся строк

 testdata[1:2] <- t( apply(testdata[1:2], 1, sort) ) testdata[!duplicated(testdata[1:2]),] # Var1 Var2 fg #1 1 4 blue blue #2 2 3 green green #5 5 5 orange2 orange1 

Если люди заинтересованы в решении этого вопроса, используя dplyr:

 library(dplyr) testdata %>% rowwise() %>% mutate(key = paste(sort(c(Var1, Var2)), collapse="")) %>% distinct(key, .keep_all=T) %>% select(-key) # Source: local data frame [3 x 4] # Groups:  # # # A tibble: 3 × 4 # Var1 Var2 fg #     # 1 1 4 blue blue # 2 2 3 green green # 3 5 5 orange2 orange1 

Если данные велики, как в Sort Large amout данных и сохранять повторяющиеся пары значений в R , использование apply() в каждой строке будет дорогостоящим. Вместо этого создайте набор уникальных значений

 uid = unique(unlist(testdata[c("Var1", "Var2")], use.names=FALSE)) 

определить, нужен ли своп

 swap = match(testdata[["Var1"]], uid) > match(testdata[["Var2"]], uid) 

и обновление

 tmp = testdata[swap, "Var1"] testdata[swap, "Var1"] = testdata[swap, "Var2"] testdata[swap, "Var2"] = tmp 

удалять дубликаты по-прежнему

 testdata[!duplicated(testdata[1:2]),] 

Если бы было много дополнительных столбцов, и их копирование было бы дорогостоящим, более автономным решением было бы

 uid = unique(unlist(testdata[c("Var1", "Var2")], use.names=FALSE)) swap = match(testdata[["Var1"]], uid) > match(testdata[["Var2"]], uid) idx = !duplicated(data.frame( V1 = ifelse(swap, testdata[["Var2"]], testdata[["Var1"]]), V2 = ifelse(swap, testdata[["Var1"]], testdata[["Var2"]]))) testdata[idx, , drop=FALSE] 
  • backtransform `scale ()` для построения графика
  • Как выбрать строку с максимальным значением в каждой группе
  • Почему некоторые символы Юникода отображаются в matrixх, но не в кадрах данных в R?
  • условие имеет длину> 1, и только первый элемент будет использоваться в if else statement
  • Почему я получаю «предупреждение, что длинная длина объекта не кратная короткой длине объекта»?
  • Явное вызов return в функции или нет
  • Как удалить все объекты, кроме одного из рабочей области в R?
  • используя substitute для получения имени аргумента с помощью
  • Существует pmin и pmax, каждый из которых принимает na.rm, почему нет psum?
  • Ошибка в model.frame.default ... переменная длина отличается
  • Разверните строки по дате с использованием даты начала и окончания
  • Interesting Posts

    Как добавить библиотеки boost в CMakeLists.txt

    Можно ли рассматривать 2D-массив как непрерывный массив 1D?

    REST API – DTO или нет?

    Показывать, начиная со специальной строки, до специального регулярного выражения для команды хвоста Linux

    Как сделать одно окно на Mac OS X липким для каждого рабочего пространства?

    Какова ценность контрольных сумм MD5, если потенциально также можно было манипулировать самим хеш-файлом MD5?

    Как заполнить форму Jsoup?

    Почему memset принимает int вместо char?

    Возможно ли создать индивидуальные настройки питания для каждого жесткого диска?

    Как вызвать частный статический метод с использованием отражения (Java)?

    Получить аргументы метода с помощью Spring AOP?

    Добавить ON DELETE поведение CASCADE в таблицу sqlite3 после ее создания

    Почему shell игнорирует кавычки в аргументах, переданных ей через переменные?

    Использование библиотеки C ++ в коде C

    Есть ли Java API для файлов mp4?

    Давайте будем гением компьютера.