как убрать строку, значение которой было найдено в группе раньше - PullRequest
0 голосов
/ 20 мая 2019

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

Хотя я могу определить, какие области перекрываются пакетом GenomicRanges, но он возвращает меня к данным, которые мне нужно отфильтровать. Что я хочу, чтобы удалить строку, данные которой в столбце B не в столбце A

data<- read.csv(textConnection(
"index,queryhits, subjecthits
 1, 1,  530,
 2, 2,  545,
 3, 2,  799,
 4, 2,  93,
 5, 3,  415,
 6, 4,  745,
 7, 545,799,
 8, 545,93,
 9, 545,415,
 10, 545,745,
 "))

Значение в столбце subjecthit не должно быть в столбце queryhit. Например, в строке № 2 столбец queryhit равен 2, а столбец subjecthits равен 545. Это означает, что 545 сгруппировано с номером 2.

Тем не менее, значение в queryhit может быть 545, которое я не хочу снова считать, почему я хочу удалить строку, содержащую значение 545 в столбце queryhits Ожидаемый результат составляет

    index queryhits  subjecthits
     1 1    530
     2 2    545
     3 2    799
     4 2    93
     5 3    415
     6 4    745

Мои реальные данные составляют около 20000 строк, поэтому я хочу получить уникальное число в столбце queryhit и subjecthits.

Спасибо за любую помощь или предложение

1 Ответ

0 голосов
/ 20 мая 2019

Мы могли бы использовать %in% для создания логического индекса, отрицания (!) и подмножества строк «данных»

data[!data$index %in% data$queryhits,]
#   index queryhits subjecthits
# 1     1       530          NA
# 2     2       545          NA
# 3     2       799          NA
# 4     2        93          NA
# 5     3       415          NA
# 6     4       745          NA
...