Удалить общие значения с одной определенной группой - PullRequest
0 голосов
/ 28 декабря 2018

В большом наборе данных я хотел бы удалить строки, представляющие идентификатор, общий для образца A. Затем я хотел бы удалить все строки из образца A.

 feature id sample
      a  1      A
      b  1      B
      c  2      A
      d  2      C
      e  3      A
      f  4      B
      g  4      C
      h  5      C
      i  5      C

Выходные данныедолжно быть:

 feature id sample
      f  4      B
      g  4      C
      h  5      C
      i  5      C

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

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Вот базовая идея R с использованием ave,

with(dd, ave(sample, id, FUN = function(i)!'A' %in% i))

Таким образом, чтобы использовать ее для индексации,

dd[as.logical(with(dd, ave(sample, id, FUN = function(i)!('A' %in% i)))),]
#  feature id sample
#6       f  4      B
#7       g  4      C
#8       h  5      C
#9       i  5      C
0 голосов
/ 28 декабря 2018

Мы можем использовать subset

subset(df, !id %in% id[sample == "A"])
#    feature id sample
#6       f  4      B
#7       g  4      C
#8       h  5      C
#9       i  5      C
0 голосов
/ 28 декабря 2018

Предполагая, что вы хотите удалить все строки, у которых id совпадает с id с в "A", вы можете сделать

df[!df$id %in% df$id[df$sample == "A"], ]

#  feature id sample
#6       f  4      B
#7       g  4      C
#8       h  5      C
#9       i  5      C

То же самое с dplyr

library(dplyr)
df %>%  filter(!id %in% id[sample == "A"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...