Комбинации в правильном порядке - PullRequest
1 голос
/ 28 мая 2019

Я имею дело с комбинациями переменных.В моей модели комбинация (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"))

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

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

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)
                })
1 голос
/ 28 мая 2019

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