R dplyr сгруппировать по одному столбцу и фильтровать строки по двум другим столбцам - PullRequest
1 голос
/ 16 октября 2019

Вот пример моего фрейма данных. И я хочу, чтобы результаты группировались по столбцу A (colA), а затем отфильтровывали строки, в которых одновременно находились только слова, имеющие следующие 4 типа значений ("colB == 1 & colC == 1", "colB == 2 &colC == 2 "," colB == 1 & colC == 2 "," colB == 2 & colC == 1 "). Я подозреваю, что это будет связано с совместным использованием условий И и ИЛИ, но я не уверен, как это сделать.

colA  colB colC
become  2   1
become  2   1
become  2   1
borrow  1   2
break   1   2
break   1   1
bridge  1   1
build   1   2
buy     1   2
buy     2   2
buy     2   1
buy     1   1
buy     1   1

Поэтому в вышеприведенном примере были выбраны только строки «buy». Вывод должен быть примерно таким:

colA  colB colC
buy     1   2
buy     2   2
buy     2   1
buy     1   1
buy     1   1

1 Ответ

0 голосов
/ 16 октября 2019

После группировки по 'colA', filter строк, проверяя, есть ли all элементы в vector (c('11', ...., '21')), есть %in% paste d, 'colB', 'colC'

library(dplyr)
library(stringr)
df1 %>% 
   group_by(colA) %>% 
   filter( all(c('11', '22', '12', '21') %in% str_c(colB, colC)))
# A tibble: 5 x 3
# Groups:   colA [1]
#  colA   colB  colC
#  <chr> <int> <int>
#1 buy       1     2
#2 buy       2     2
#3 buy       2     1
#4 buy       1     1
#5 buy       1     1

data

df1 <- structure(list(colA = c("become", "become", "become", "borrow", 
"break", "break", "bridge", "build", "buy", "buy", "buy", "buy", 
"buy"), colB = c(2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
1L, 1L), colC = c(1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 
1L, 1L)), class = "data.frame", row.names = c(NA, -13L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...