Комбинации в правильном порядке

Я имею дело с комбинациями переменных. В моей модели комбинация (A,B) будет аналогична (B,A). Я хотел бы изменить свои данные, чтобы получить похожие комбинации в том же порядке.

Я пытаюсь использовать функцию duplicated и работать с функцией paste, но не решаю проблему.

Это моя первая таблица:

df <- data.frame(V1=c("A","A","A","B","B","B"),
                 V2=c("B","C","D","A","D","A"))

Это то, что я хотел бы получить:

df2 <- data.frame(V1=c("A","A","A","B","B","B"),
                  V2=c("B","C","D","A","D","A"),
                  Test=c("OK","OK","OK","FALSE","OK","FALSE"),
                  V1b=c("A","A","A","A","B","A"),
                  V2b=c("B","C","D","B","D","B"))

Вы хотите сказать, что он каким-то образом должен определить, что (B, A) не является правильным порядком, объявить его ложным, а затем сказать, что он должен быть (A, B)? Тогда как определить правильный порядок?

Sven 28.05.2019 11:43

Да - правильный порядок для меня не особо важен. На самом деле я просто хотел бы, чтобы все (A,B) и (B,A) стали либо (A,B); (А,В) или (В,А) ; (Б;А)

Plantekös 28.05.2019 11:47

Я думаю, что алгоритм может быть итеративным => У меня есть комбинация (B,A). Если (A,B) существуют в верхней части таблицы, то поставить (A,B) вместо (B,A), но я не знаю, как это сделать

Plantekös 28.05.2019 11:48
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Предполагая, что "правильный порядок" - это алфавитный порядок, вы можете использовать

alphabetical <- function(x,y){x < y}

которые возвращают true, когда x, y отсортированы по алфавиту, и false в противном случае.

Обновлено: вот рабочее решение:


df_sorted <- df %>% rowwise() %>% mutate(Test = alphabetical(as.character(V1),as.character(V2))) %>% 
                 mutate(V1b = if (Test) {
                  as.character(V1)
                } else {
                  as.character(V2)
                }) %>% 
                mutate(V2b = if (Test) {
                  as.character(V2)
                } else {
                  as.character(V1)
                })

С помощью dplyr вы можете:

df %>%
 mutate(V1b = pmin(V1, V2), 
        V2b = pmax(V1, V2),
        Test = paste0(V1, V2) != paste0(V1b, V2b))

  V1 V2 V1b V2b  Test
1  A  B   A   B FALSE
2  A  C   A   C FALSE
3  A  D   A   D FALSE
4  B  A   A   B  TRUE
5  B  D   B   D FALSE
6  B  A   A   B  TRUE

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