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

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

structure(list(type = c("A", "A", "A", "A", "B", "B", "B", "B", 
"B"), categ = c("apple", "pear", "apple", "banana", "pear", "kiwi", 
"apple", "banana", "mango")), .Names = c("type", "categ"), row.names = c(NA, 
-9L), class = c("tbl_df", "tbl", "data.frame"))

#  type  categ 
#  <chr> <chr> 
#  A     apple 
#  A     pear  
#  A     apple 
#  A     banana
#  B     pear  
#  B     kiwi  
#  B     apple 
#  B     banana
#  B     mango 

Я хочу получить строки из любой группы, где categ является одним из значений, принятых categ в группе A для type

В основном я хочу сделать это:

df %>% 
  filter(categ %in% pull(filter(df, type == 'A'), categ))


#  type  categ 
#  <chr> <chr> 
#  A     apple 
#  A     pear  
#  A     apple 
#  A     banana
#  B     pear  
#  B     apple 
#  B     banana

это ужасный способ сделать это, и я уверен, что есть гораздо лучший способ, но я не могу его найти.

Спасибо за помощь и извините за плохой английский.

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

Одна возможность может быть:

df %>% 
 filter(categ %in% categ[type == "A"])

  type  categ 
  <chr> <chr> 
1 A     apple 
2 A     pear  
3 A     apple 
4 A     banana
5 B     pear  
6 B     apple 
7 B     banana
1 голос
/ 20 июня 2019

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

library(dplyr)
df %>% 
  slice(match(categ, categ[type == "A"]))
# A tibble: 7 x 2
#  type  categ 
#  <chr> <chr> 
#1 A     apple 
#2 A     pear  
#3 A     apple 
#4 A     banana
#5 A     pear  
#6 A     apple 
#7 A     banana
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...