Подмножество всех строк для группы, которая имеет определенный символ в другом столбце - PullRequest
0 голосов
/ 11 мая 2018

Я хочу поместить все строки для идентификаторов в наборе данных, которые имеют "P" в переменной B.

Мои данные:

Data <- cbind(ID = c(1,1,2,2,2,2,3,3), B=c("A1", "P2", "B2", "P1", "B1", "B1", "A4", "D1")) 

   ID  B   
 "1" "A1"
 "1" "P2"
 "2" "B2"
 "2" "P1"
 "2" "B1"
 "2" "B1"
 "3" "A4"
 "3" "D1"

Мой желаемый результат будет:

   ID  B   
 "1" "A1"
 "1" "P2"
 "2" "B2"
 "2" "P1"
 "2" "B1"
 "2" "B1"

Я попытался поиграться с grep и посмотрел на% как%, но не смог выяснить, как сохранить все строки в группах, если для этого идентификатора в переменной B встречается P *

Ps <- Data %>% group_by(Data$ID) %>% grep("P", Data$B )

выдает ошибку из-за символа в переменной B

Такое ощущение, что я видел решение этого раньше, но я не смог его найти. Есть идеи или указания?

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

A base R опция с grep и table будет

Data[Data[,"ID"] %in% names(which(table(Data[,"ID"], grepl("P",Data[, "B"]))[,2]!=0)),]
0 голосов
/ 11 мая 2018

Попробуйте это:

library(dplyr)
Data <- data.frame(ID = c(1,1,2,2,2,2,3,3), B=c("A1", "P2", "B2", "P1", "B1", "B1", "A4", "D1"))
> Data %>% group_by(ID) %>% filter(any(grepl("P",B)))
# A tibble: 6 x 2
# Groups:   ID [2]
     ID      B
  <dbl> <fctr>
1     1     A1
2     1     P2
3     2     B2
4     2     P1
5     2     B1
6     2     B1

Обратите внимание на использование data.frame() вместо cbind. Если вы хотите создать фреймы данных, старайтесь избегать cbind.

Кроме того, большинство dplyr глаголов не требуют от вас ссылаться на переменные с $, как вы это делали, как в group_by(Data$ID). Достаточно только названия столбца.

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