подмножество всех строк с одинаковым значением в одном столбце, сгруппированных по другому столбцу, где хотя бы одна строка третьего столбца содержит определенную c букву в R - PullRequest
0 голосов
/ 18 июня 2020

Я собираю данные из базы данных, где у меня есть два разных идентификатора (ID1, Nr). Я хочу собрать все строки, которые имеют дублированный ID1, сгруппированные по «Nr», ГДЕ хотя бы одна запись в Names имеет букву «a».

df <- data_frame(ID1 = c('100', '100', '100', '100', '100', '100', '100', '100', '100'),
                 Nr = c('1', '1', '1', '2', '2', '2', '2', '3', '4'),
                 Names = c('aaa bb', 'aa bbb', 'ccc', 'ccc', 'ccc', 'ddd', 'ccc', 'ccc', 'add'))

Итак, желаемый результат будет:

output <- data_frame(ID1= c('100', '100', '100', '100'),
                     Nr = c('1', '1', '1', '4'),
                     Names = c('aaa bb', 'aa bbb', 'ccc', 'add'))

Заранее спасибо!

1 Ответ

1 голос
/ 18 июня 2020

Вы можете group_by Nr столбец и использовать grepl:

library(dplyr)
df %>% group_by(Nr) %>% filter(any(grepl('a', Names)))

#  ID1   Nr    Names 
# <chr> <chr> <chr> 
#1 100   1     aaa bb
#2 100   1     aa bbb
#3 100   1     ccc   
#4 100   4     add   

Тот же logi c может быть реализован и в базе R

subset(df, ave(grepl('a', Names), Nr, FUN = any))

как data.table:

library(data.table)
setDT(df)[, .SD[any(grepl('a', Names))], Nr]

В исходном наборе данных, если у вас есть больше ID, вы также можете включить его в group_by.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...