Набор данных поднабора на основе логического теста - PullRequest
1 голос
/ 19 марта 2019

Я хотел бы установить поднабор данных на основе логического теста.

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

A  B
1  2
3  4
5  7
2  1

В основном я хотел бы разделить набор данных на два-данные, в которых будут содержаться все наблюдения, для которых для данной строки существует обратная комбинация.Таким образом, желаемый результат будет выглядеть так:

data1
A B
1 2
2 1

И второе:

data2
3 4
5 7

Я знаю, что функция subset() позволяет проводить логические тесты, но я просто не знаю, как установитьдо этого в R.

1 Ответ

3 голосов
/ 19 марта 2019

Вы можете найти дублированные индексы строк, а затем подмножество на основе этого:

MySortedData <- data.frame(t(apply(df,1,sort)))
# X1 X2
# 1  1  2
# 2  3  4
# 3  5  7
# 4  1  2

MyDuplicates <- duplicated(MySortedData) | duplicated(MySortedData, fromLast=TRUE)
# [1]  TRUE FALSE FALSE  TRUE

MySubset2 <- df[!MyDuplicates,]
# A B
# 2 3 4
# 3 5 7

MySubset1 <- df[MyDuplicates,]
# A B
# 1 1 2
# 4 2 1
...