Подмножество данных на основе уникального спаривания - PullRequest
0 голосов
/ 31 мая 2018

У меня есть фрейм данных (x), который выглядит следующим образом:

Value<-c(FALSE, TRUE, FALSE, TRUE, FALSE)
Allele<-c('a','a','a','b','b')
Match<-c('b','b','c','b','b')

Я хотел бы разместить данные таким образом, чтобы он выводил только те значения, в которых пары между Allele и Match не встречаются чаще, чемодин раз.В приведенном выше наборе данных он будет выводить только: false, a, b

Я пытался:

x[!duplicated("Allele","Match"),]

Но это не удаляет пары, которые имеют более одного примера совпаденияв двух столбцах - это дает тот же результат, что и х.Какие-либо предложения?Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Нам также нужно иметь duplicated для рассмотрения с обратной стороны

x[!(duplicated(x[-1])|duplicated(x[-1], fromLast = TRUE)),]
#   Value Allele Match
#3 FALSE      a     c

Кроме того, синтаксис в коде OP, заключенный в кавычки с именами столбцов, не будет работать.Нам нужно установить подмножество набора данных

x[c("Allele", "Match")]

и затем применить duplicated к подмножеству столбцов

duplicated(x[c("Allele", "Match")])

data

x <- data.frame(Value, Allele, Match)
0 голосов
/ 31 мая 2018

Вы можете группировать по Allele, Match и удалять строки групп, содержащие более 1 строки.Решение с использованием dplyr может иметь вид:

library(dplyr)

x %>% group_by(Allele, Match) %>%
  filter(n()<2) %>%
  as.data.frame()

#   Value Allele Match
# 1 FALSE      a     c

Данные:

Value<-c(FALSE, TRUE, FALSE, TRUE, FALSE)
Allele<-c("a","a","a","b","b")
Match<-c("b","b","c","b","b")

x <- data.frame(Value, Allele, Match, stringsAsFactors = FALSE)
...