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

У меня есть фрейм данных: df=data.frame(sample.id=c(1, 1, 2, 3, 4, 4, 5, 6, 7, 7), sample.type=c(U, S, S, U, U, D, D, U, U, D), cond = c(1.4, 17, 12, 0.45, 1, 7, 1, 9, 0, 14))

Мне нужен фрейм данных, который содержит только строки sample.ids, которые имеют как sample.type "U", так и sample.type "D"

новый df: df.new=data.frame(sample.id=c(4, 4, 7, 7), sample.type=c(U, D, U, D), cond = c(1, 7, 0, 14))

Какой самый простой способ сделать это? Дублированный не работает, потому что он будет возвращать sample.ids с U и S, а также с U и D. Я не могу понять, как отфильтровать / установить подмножество для идентификаторов сэмплов, которые являются sample.type U и sample.type D. Спасибо за любой совет!

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Использование filter с any

df %>% group_by(sample.id) %>% filter(any(sample.type == 'U') & any(sample.type == 'D'))
# A tibble: 4 x 3
# Groups:   sample.id [2]
  sample.id sample.type  cond
      <dbl>      <fctr> <dbl>
1         4           U     1
2         4           D     7
3         7           U     0
4         7           D    14
0 голосов
/ 27 июня 2018

С данными.таблицы

library(data.table)
setDT(df)

df[, if(all(c('U', 'D') %in% sample.type)) .SD, by = sample.id]
0 голосов
/ 27 июня 2018

Мы можем сделать filter по group

library(dplyr)
df %>% 
   group_by(sample.id) %>% 
   filter(all(c("U", "D") %in% sample.type))
# A tibble: 4 x 3
# Groups:   sample.id [2]
#  sample.id sample.type  cond
#      <dbl> <fct>       <dbl>
#1         4 U               1
#2         4 D               7
#3         7 U               0
#4         7 D              14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...